Java程序在系统托盘中多次出现

Java程序在系统托盘中多次出现,java,windows,icons,system-tray,Java,Windows,Icons,System Tray,我构建了一个应用程序,它通过SystemTray类隐藏在系统托盘中。工作正常,但当我退出程序并再次启动它时,它不会在用光标悬停它之前将图标从任务栏中移除。多次执行此操作会导致出现多个图标: 这是我的程序的问题还是Windows的错误 我随后创建了系统托盘图标。当创建托盘图标的应用程序终止时,Windows不会自动删除托盘图标。只有当用户将鼠标悬停在它上面并注意到拥有的进程不再存在时,它才会这样做 要确保图标立即删除,您必须在程序退出时调用systemTray.remove(yourcon)。系

我构建了一个应用程序,它通过SystemTray类隐藏在系统托盘中。工作正常,但当我退出程序并再次启动它时,它不会在用光标悬停它之前将图标从任务栏中移除。多次执行此操作会导致出现多个图标:

这是我的程序的问题还是Windows的错误


我随后创建了系统托盘图标。

当创建托盘图标的应用程序终止时,Windows不会自动删除托盘图标。只有当用户将鼠标悬停在它上面并注意到拥有的进程不再存在时,它才会这样做


要确保图标立即删除,您必须在程序退出时调用
systemTray.remove(yourcon)

系统托盘包含一个或多个托盘图标,这些图标使用
add(java.awt.TrayIcon)
方法添加到托盘中。当不再需要它们时,可以使用
remove(java.awt.TrayIcon)
方法删除它们。

如何确保在关机时调用remove?只需检查,但是,您确认了之前的应用程序实例已在task manager中关闭了吗?我知道许多程序在崩溃时会以这种方式运行,而不是正常退出。我同意@PeterLawrey的说法:您可能缺少系统托盘。删除(图标)调用。啊,您必须调用这样的函数吗?谢谢你让我知道。但要调用它,我需要知道用户何时退出应用程序。我可以绑定关闭事件吗?+1有趣。确保关机时从托盘中释放图标