gpt4 book ai didi

java - 使用什么技术将系统托盘前端写入webapp?

转载 作者:行者123 更新时间:2023-11-30 07:39:13 25 4
gpt4 key购买 nike

我们有一个在 tomcat 上运行的内部 Web 应用程序,它是在 Spring 上构建的。 Web 应用程序前端是用 Flex 构建的。
我想创建一个跨平台的系统托盘应用程序,允许进入应用程序的主页并在服务器中发生某些事情时显示警报。

您认为最好的技术是:

  • 系统托盘本身? Java Swing ?
  • 服务器和系统托盘之间的通信?网络服务? RSS订阅? Spring 远程处理? JMX 通知?

问候,

Vim

最佳答案

如果您想继续使用 Java,您有两个选择:

  • 使用 Swing/AWT。确保您使用的是 Java 6 及更高版本(您可以将其与您的应用程序一起安装),因为它支持系统托盘(来自 API):

    TrayIcon trayIcon = null;
    if (SystemTray.isSupported()) {
    // get the SystemTray instance
    SystemTray tray = SystemTray.getSystemTray();
    // load an image
    Image image = Toolkit.getDefaultToolkit.getImage("");
    // create a action listener to listen for default action executed on
    // the tray icon
    ActionListener listener = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    // execute default action of the application
    // ...
    }
    };
    // create a popup menu
    PopupMenu popup = new PopupMenu();
    // create menu item for the default action
    MenuItem defaultItem = new MenuItem("");
    defaultItem.addActionListener(listener);
    popup.add(defaultItem);
    // / ... add other items
    // construct a TrayIcon
    trayIcon = new TrayIcon(image, "Tray Demo", popup);
    // set the TrayIcon properties
    trayIcon.addActionListener(listener);
    // ...
    // add the tray image
    try {
    tray.add(trayIcon);
    } catch (AWTException e) {
    System.err.println(e);
    }
    // ...
    } else {
    // disable tray option in your application or
    // perform other actions
    // ...
    }
    // ...
    // some time later
    // the application state has changed - update the image
    if (trayIcon != null) {
    trayIcon.setImage(updatedImage);
    }
    // ...
  • 使用 SWT/JFace .这是一个示例(取自 here ):

    public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    Image image = new Image(display, 16, 16);
    final Tray tray = display.getSystemTray();
    if (tray == null) {
    System.out.println("The system tray is not available");
    } else {
    final TrayItem item = new TrayItem(tray, SWT.NONE);
    item.setToolTipText("SWT TrayItem");
    item.addListener(SWT.Show, new Listener() {
    public void handleEvent(Event event) {
    System.out.println("show");
    }
    });
    item.addListener(SWT.Hide, new Listener() {
    public void handleEvent(Event event) {
    System.out.println("hide");
    }
    });
    item.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event event) {
    System.out.println("selection");
    }
    });
    item.addListener(SWT.DefaultSelection, new Listener() {
    public void handleEvent(Event event) {
    System.out.println("default selection");
    }
    });
    final Menu menu = new Menu(shell, SWT.POP_UP);
    for (int i = 0; i < 8; i++) {
    MenuItem mi = new MenuItem(menu, SWT.PUSH);
    mi.setText("Item" + i);
    mi.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event event) {
    System.out.println("selection " + event.widget);
    }
    });
    if (i == 0)
    menu.setDefaultItem(mi);
    }
    item.addListener(SWT.MenuDetect, new Listener() {
    public void handleEvent(Event event) {
    menu.setVisible(true);
    }
    });
    item.setImage(image);
    }
    shell.setBounds(50, 50, 300, 200);
    shell.open();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    image.dispose();
    display.dispose();
    }

关于java - 使用什么技术将系统托盘前端写入webapp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com