Используя Java 8 и AWT, я показываю иконку в трее в Windows 10. Я также использую иконку в трее для отображения уведомлений.При отображении этого уведомления прослушиватель мыши на значке не будет генерировать событие первого нажатия и нажатия.
Вот минимальный пример:
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class TrayIconDemo {
public static void main(String[] args) {
createTrayIcon();
}
private static void createTrayIcon() {
Image image = Toolkit.getDefaultToolkit().getImage(TrayIconDemo.class.getResource("/foo.png"));
final TrayIcon trayIcon = new TrayIcon(image);
trayIcon.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("Mouse Clicked");
}
public void mousePressed(MouseEvent e) {
System.out.println("Mouse Pressed");
}
public void mouseReleased(MouseEvent e) {
System.out.println("Mouse Released");
}
});
try {
SystemTray.getSystemTray().add(trayIcon);
} catch (AWTException e) {
System.out.println("TrayIcon could not be added.");
return;
}
// trayIcon.displayMessage("title", "message", TrayIcon.MessageType.NONE);
}
}
Если вы запустите пример как есть идважды щелкните значок, и вы получите шесть ожидаемых событий (по три на каждый клик):
Mouse Pressed
Mouse Released
Mouse Clicked
Mouse Pressed
Mouse Released
Mouse Clicked
Теперь, если вы раскомментируете последнюю строку, которая вызывает displayMessage
, вы получите небольшое сообщение:
но если дважды щелкнуть значок, вместо этого вы получите:
Mouse Released
Mouse Pressed
Mouse Released
Mouse Clicked
Начальные pressed
и clicked
события где-то проглочены.Почему это так?
Когда вы нажимаете на иконку в трее, сообщение не исчезает.Если вы отклоните сообщение, то значок в трее будет работать, как и ожидалось, со всеми 6 событиями.
Вот видео, показывающее проблему:
https://www.youtube.com/watch?v=eV2Lwim2EcY