Java 22 JDK
主要是,我使用 TrayIcon.MessageType.NONE 调用 SystemNotificationUtil.notification() 方法
@Slf4j
public class SystemNotificationUtil {
private static SystemTray tray;
private static Image image;
private static TrayIcon trayIcon;
static {
if (SystemTray.isSupported()) {
tray = SystemTray.getSystemTray();
image = Toolkit.getDefaultToolkit().createImage("favicon.ico");
trayIcon = new TrayIcon(image, "Tray");
trayIcon.setImageAutoSize(true);
trayIcon.setToolTip("System tray demo");
try {
tray.add(trayIcon);
} catch (AWTException e) {
log.error("SystemNotificationUtil", e);
}
} else log.info("SystemNotificationUtil: System tray not supported");
}
public static void notification(String title, String message, TrayIcon.MessageType messageType) {
trayIcon.displayMessage(title, message, messageType);
}
问题:
警报来自 OpenJDK 二进制平台,而不是来自正在启动的应用程序
应用程序窗口中不显示应用程序图标
托盘中有一个空白区域而不是图标
我找到了一个解决方案,其中在某些实用程序的帮助下打包的java.exe,他们规定了一个不同的值而不是OpenJDK二进制平台,但我不想从事这种变态,并且它不会修复其他问题2 个问题。
如果无法以某种方式摆脱这个问题,也许你可以推荐一些其他库?
对于上下文,关于可执行文件:使用launch4j-maven-plugin,我将jar打包成exe,依赖项和JDK只是转移到目标
编辑:也许有人知道如何使用这个?
<dependency>
<groupId>de.mobanisto</groupId>
<artifactId>toast4j</artifactId>
<version>0.2.0</version>
</dependency>
从简短的自述文件中,我意识到这是访问“新”Windows API 以显示通知的依赖项,但我仍然不知道如何使用它,也许它可以解决我的问题
遗憾的是,AWT 使用了 20 年前的 Windows API,而不是新的 API。 每个操作系统都存在问题,并且存在各种错误,但现在 AWT 已经不再关心了。
Oracle 放弃了它,即使他们不想承认。 Oracle 对此感到羞耻。
https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8323977
https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8341173
https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8323821
https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8310352
https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8341144