有什么方法可以检查系统托盘是否已经存在?当我继续运行程序以创建系统托盘时,会出现多次,这表示正在运行多个程序。那么,我需要检查系统托盘是否已经存在?

最佳答案

通过多个正在运行的应用程序检查纸盘内容

您不能因为SystemTray方法引用当前应用程序的SystemTray
因此,不同的应用程序不会共享相同的SystemTray状态。

SystemTray javadoc确实指出:


  每个Java应用程序都有一个SystemTray实例,该实例允许
  该应用程序可与桌面系统托盘交互,而该应用程序
  在跑。


通常,应该在它们之间隔离多个正在运行的JVM。
因此,可能不应该通过耦合它们来解决您的要求。
如果您多次运行同一应用程序,则应接受每个应用程序具有完全相同的行为。
相反,如果您不想允许同一应用程序同时运行多次,则可以使用技巧来打开ServerSocket连接on a specific port at the application startup

检查一个正在运行的应用程序中的纸盘内容

您可以使用SystemTray.getTrayIcons()返回由应用程序在TrayIcon[]对象中添加到任务栏中的实际图标。
您可以如此循环访问数组元素,并仅在找不到匹配项时添加TrayIcon

另外请注意,如果您添加两次相同的TrayIcon实例,则应根据IllegalArgumentException方法抛出SystemTray.add()

else if (icons.contains(trayIcon)) {
    throw new IllegalArgumentException("adding TrayIcon that is already added");
}

10-08 13:41