java - Windows 10 通知中的空白图标

标签 java notifications windows-10 system-tray trayicon

我的 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 上它的显示方式有所不同。在通知上,左侧显示了一个图标。它通常是我应用程序的当前托盘图标,但有时它只是空白:

The erroneous notification

在上方的红色圆圈(在通知上)是空白图标,它有时会代替我的应用图标出现(在下方的红色圆圈中,在系统托盘上)。我不知道为什么会这样。我所知道的是,只有当应用程序的托盘图标和通知消息在第一个通知(始终正确显示其图标)消失之前发生变化时,才会发生这种情况。如果显示通知,然后淡出/手动关闭,然后应用程序的托盘图标和通知更改,下一个通知(带有刚刚设置的新消息)将正确显示应用程序的图标。

最佳答案

刚刚遇到这个问题并找到了正确的解决方案:

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"); 显示

Working notification

关于java - Windows 10 通知中的空白图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866072/

相关文章:

java - Http 到 https 重定向

android - 如何创建即使在手机重启后也始终运行的通知?

amazon-web-services - Codebuild 失败时使用 Cloudformation 模板发送通知邮件

windows - Spectre 性能打击在 2018 年 4 月更新后消失了吗?

c# - 需要在 webview Win 10 UWP 中获取鼠标事件

java - TextField "umlauts"在 linux 上没有显示

java - MigLayout - componentResized() 调用次数过多

Java 比较器compareToIgnoreCase

android - 是否可以将通知从抬头移动到状态栏?

windows-10 - 我可以在 Ubuntu WSL 中使用 Python QT 开发 GUI 软件吗?