有什么方法可以检查系统托盘是否已经存在?当我继续运行程序来创建系统托盘时,会出现多次出现,这意味着正在运行多个程序。那么,我需要检查系统托盘已经存在吗?
答案 0 :(得分:4)
您不能将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");
}