You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:37:56