我的java应用程序使用看起来或多或少的代码在系统托盘上显示其图标:
Toolkit mainToolkit = Toolkit.getDefaultToolkit();
SystemTray mainTray = SystemTray.getSystemTray();
Image trayIconImage = mainToolkit.createImage(getClass().getResource(resourcePath));
TrayIcon mainTrayIcon = new TrayIcon(trayIconImage);
mainTray.add(mainTrayIcon);
有时我会改变这样的图标:
Image newImage = mainToolkit.createImage(getClass().getResource(otherPath));
mainTrayIcon.setImage(newImage);
我的应用有时需要显示一些通知(使用来自托盘图标的气球消息):
mainTrayIcon.displayMessage(someCaption, msg, TrayIcon.MessageType.NONE);
所有这些代码实际上都是以某种方式简化的,但很好地掌握了这个功能。
所以Windows 7上的一切都很好。但事实证明,在Windows 10上它的显示方式不同。在通知上,左侧显示一个图标。它通常是我应用的当前托盘图标,但有时它只是空白:
在上面的红色圆圈(在通知上)是有时出现的空白图标,而不是我的应用程序的图标(在系统托盘上的红色小圈中)。我不知道它为什么会发生。我所知道的只有当应用程序的托盘图标和通知消息在第一次通知(总是正确显示其图标)之前发生变化时才会发生这种情况。如果显示通知,则手动关闭淡出/然后应用程序的托盘图标和通知更改,下一个通知(使用刚设置的新消息)将正确显示应用程序的图标。
答案 0 :(得分:1)
刚刚遇到此问题并找到了正确的解决方案:
mainTrayIcon.setImageAutoSize(true);
以下是在Windows上发送通知的方法:
public static void sendNotification(String title, String subtitle, String pathToIcon) {
SystemTray mainTray = SystemTray.getSystemTray();
Image trayIconImage = Toolkit.getDefaultToolkit().getImage(pathToIcon);
TrayIcon mainTrayIcon = new TrayIcon(trayIconImage);
mainTrayIcon.setImageAutoSize(true);
try {
mainTray.add(mainTrayIcon);
mainTrayIcon.displayMessage(title, subtitle, TrayIcon.MessageType.NONE);
}
catch (Exception e) {
e.printStackTrace();
}
}
调用sendNotification("Title", "Subtitle", "icons/icon-128.png");
显示