为什么我的系统托盘图标的弹出菜单没有响应输入?
Why isn't the popup menu for my System Tray Icon responding to inputs?
我已经在后台 java 程序上工作了一段时间,它几乎可以发布了,所以我想我应该添加一种退出程序的方法。我有这个功能:
private static void setupSysTray() {
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
try {
final PopupMenu popupMenu = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(ImageIO.read(new File(workingDirectory +
fileSeparator + "tray.png")), "Multi");
final SystemTray tray = SystemTray.getSystemTray();
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(e -> {
System.out.println("Something happened!");
System.exit(0);
});
popupMenu.add(exitItem);
trayIcon.setPopupMenu(popupMenu);
tray.add(trayIcon);
} catch (IOException | AWTException e) {
e.printStackTrace();
}
}
我认为这会处理它,我从各种堆栈溢出帖子和官方文档中拼凑了它。结果是托盘图标出现,带有正确的图像和工具提示。当我右键单击它时,我看到“退出”菜单项出现。但这就是它失败的地方,菜单项没有任何悬停着色(让我相信输入完全被破坏了)并且点击该项目没有结果。我是否犯了一些愚蠢的错误,比如错误地订购了物品?这是怎么回事?
事实证明,我在我几乎忘记的旧代码部分中使用了全局鼠标挂钩。该挂钩来自 this 存储库,修复是将挂钩的原始输入设置从 true 更改为 false。
// True instead of false seems to block JavaFX events
private static GlobalMouseHook mouseHook = new GlobalMouseHook(false);
我已经在后台 java 程序上工作了一段时间,它几乎可以发布了,所以我想我应该添加一种退出程序的方法。我有这个功能:
private static void setupSysTray() {
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
try {
final PopupMenu popupMenu = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(ImageIO.read(new File(workingDirectory +
fileSeparator + "tray.png")), "Multi");
final SystemTray tray = SystemTray.getSystemTray();
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(e -> {
System.out.println("Something happened!");
System.exit(0);
});
popupMenu.add(exitItem);
trayIcon.setPopupMenu(popupMenu);
tray.add(trayIcon);
} catch (IOException | AWTException e) {
e.printStackTrace();
}
}
我认为这会处理它,我从各种堆栈溢出帖子和官方文档中拼凑了它。结果是托盘图标出现,带有正确的图像和工具提示。当我右键单击它时,我看到“退出”菜单项出现。但这就是它失败的地方,菜单项没有任何悬停着色(让我相信输入完全被破坏了)并且点击该项目没有结果。我是否犯了一些愚蠢的错误,比如错误地订购了物品?这是怎么回事?
事实证明,我在我几乎忘记的旧代码部分中使用了全局鼠标挂钩。该挂钩来自 this 存储库,修复是将挂钩的原始输入设置从 true 更改为 false。
// True instead of false seems to block JavaFX events
private static GlobalMouseHook mouseHook = new GlobalMouseHook(false);