我希望你能帮助我:我正在开发一个小型Java应用程序(Java版本7),需要将其最小化到系统托盘中。
我使用SystemTray类,并使用SystemTray.isSupported()进行检查,然后
我使用SystemTray类,并使用SystemTray.isSupported()进行检查,然后
SystemTray systemTray = SystemTray.getSystemTray();
ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("icon.png"));
[...]
systemTray.add(trayIcon);
(当然带有弹出窗口)
在Windows上,它运行得很好。在XFCE、Xubuntu上也没有问题,图标与弹出窗口一起工作。但是在KDE和Gnome shell上……它不工作。
KDE(4.14.1)
(Qt:4.8.6 工具Plasma:4.11.12)
SystemTray.isSupported()=true,当程序到达以下行时: systemTray.add(trayIcon); 捕获到异常:
托盘处理期间出错: java.awt.AWTException: 无法显示托盘图标。
因此,图标是白色的,用户单击它时不起作用,没有弹出窗口。
Gnome Shell(3.12.2)
SystemTray.isSupported()=true,图标位于底部的通知区域,但鼠标事件不起作用……
为了解决这些问题,我认为SWT可能是一个好主意。但是当我实现它(最新版本)时,我收到了以下警告:
警告**: 无法连接到辅助功能总线:无法连接到套接字/tmp/[...]
它不起作用了... 编辑:不再是这样,我可以通过外部类解决SWT的问题。警告可能不是由SWT引起的,而是环境系统引起的(我在终端中使用其他应用程序时也有同样的警告)。
那么现在我该怎么办?
我想使用System.getenv("XDG_CURRENT_DESKTOP")
和System.getenv("GDMSESSION")
来检查环境系统,然后根据KDE或Gnome 3启用或禁用系统托盘...但这个解决方案并不是真正的好,因为它是一个本地解决方案,适用于多平台(我的意思是根据操作系统),而不是全局解决方案(一个方法适用于所有操作系统)...
那么,还有其他想法吗?我不知道...是否有一种方法将嵌入式JWindow定义到系统托盘中?