有什么方法可以检查系统托盘是否已经存在?当我继续运行程序以创建系统托盘时,会出现多次,这表示正在运行多个程序。那么,我需要检查系统托盘是否已经存在?
最佳答案
通过多个正在运行的应用程序检查纸盘内容
您不能因为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");
}