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

Windows系统下Java通知图标显示异常问题排查

Windows下Java通知Toast图标显示损坏问题分析

问题现象

  • 在Windows 10/11系统中,使用各厂商OpenJDK 11至21版本开发时,Java弹出的通知Toast图标显示异常
  • 窗口图标、系统托盘图标显示正常,但通知图标表现不一致:Windows 10下仅下半部分损坏,Windows 11下完全损坏

复现代码

package org.example;

import java.awt.*;

public class Main {

  public static void main(String[] args) {

    if (SystemTray.isSupported()) {
      Dialog d = new Dialog(((Window) null), "Corrupt Icon Demo");
      d.setLayout(new BorderLayout());
      d.setBounds(0, 0, 750, 500);
      d.setVisible(true);

      final Image normalImage = Toolkit.getDefaultToolkit().createImage("./Foo.png");
      d.setIconImage(normalImage);

      final SystemTray tray = SystemTray.getSystemTray();
      final TrayIcon trayIcon = new TrayIcon(normalImage, "Corrupt Icon Demo");
      trayIcon.setImageAutoSize(true);
      try {
        tray.add(trayIcon);
      } catch (AWTException e) {
        throw new RuntimeException(e);
      }

      trayIcon.displayMessage("Test", "Test", TrayIcon.MessageType.NONE);
    }
  }
}

问题根源

通过分析OpenJDK的WTrayIconPeer.java源码可以确定:

  • 代码中TRAY_ICON_MASK_SIZE保持固定值,未根据Windows系统的缩放设置动态调整alpha透明位掩码尺寸
  • 但图标本身已经按照系统缩放比例做了缩放处理,掩码尺寸与缩放后的图标不匹配,最终导致通知图标显示损坏

结论

这是OpenJDK的实现bug,并非你遗漏了相关配置。目前没有用户侧的简单配置可以修复该问题,可尝试以下临时方案:

  • 使用与系统默认缩放比例匹配的图标文件(例如256x256像素的PNG图标),部分场景下可缓解显示异常
  • 关注OpenJDK官方对该类问题的修复进度

内容的提问来源于stack exchange,提问作者Alexander Kalinowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:35:15