Windows 10下AWT托盘图标在任务栏重建后无响应问题咨询
关于AWT托盘图标在Windows任务栏重建后无响应的问题
问题现象
- 在Windows系统中,使用带右键菜单的AWT托盘图标时,若曾显示过托盘通知,当任务栏重建场景发生(如笔记本休眠唤醒、通过任务管理器重启
explorer.exe),托盘图标会彻底失去响应:右键点击无法弹出菜单,左键点击绑定的ActionListener也停止工作。 - 该问题仅在显示过至少一条通知后触发;若在调用
displayMessage显示通知后,先从系统托盘中移除图标再重新添加,可临时规避问题。
最小复现代码
import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.image.BufferedImage; public class TrayIconDemo { public static void main(String[] args) throws Exception { final SystemTray tray = SystemTray.getSystemTray(); final PopupMenu popup = new PopupMenu(); BufferedImage whiteImage = new BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY); whiteImage.setRGB(0, 0, 0xFFFFFF); final TrayIcon trayIcon = new TrayIcon(whiteImage, "tray icon"); // 创建右键菜单组件 MenuItem aboutItem = new MenuItem("About"); aboutItem.addActionListener(e -> System.out.println("about clicked")); popup.add(aboutItem); trayIcon.setPopupMenu(popup); trayIcon.setImageAutoSize(true); trayIcon.addActionListener(e -> System.out.println("tray clicked")); tray.add(trayIcon); trayIcon.displayMessage("hello world", "some text", java.awt.TrayIcon.MessageType.ERROR); // 取消注释以下两行可临时解决问题 //tray.remove(trayIcon); //tray.add(trayIcon); } }
疑问
- 调用
displayMessage显示托盘通知的方式是否存在错误? - 是否必须在特定线程(如AWT事件调度线程)中执行通知显示操作?
- 该问题是否属于AWT或Windows底层API的bug?
使用环境
- Windows 10 Enterprise (x86_64)
- Java 17 runtime (Azul Zulu 17.0.10)
内容的提问来源于stack exchange,提问作者SvenK
相关产品推荐
相关产品推荐

