Вот интересная ошибка (читай: я, наверное, что-то пропустил) в Java Swing. Последние два дня я пытался отследить.
Перво-наперво, создайте SSCCE .Вот, пожалуйста.
class GUI extends JFrame{
public static void main(String[] args){
// All GUI work should be handled in the EDT.
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
new GUI().setVisible(true);
}
});
}
GUI(){
// Make a nice icon
ImageIcon img = new ImageIcon(this.getClass().getClassLoader().getResource("img/1.png"));
// Make a TrayIcon with the image
SystemTray sysTray = SystemTray.getSystemTray();
TrayIcon trayIcon = new TrayIcon(img.getImage());
try {
sysTray.add(trayIcon);
}
catch(AWTException e) {
e.printStackTrace();
System.out.println("System Tray unsupported!");
}
this.setTitle("Example GUI");
this.setIconImage(img.getImage());
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}
Если бы я запустил это и закрыл окно, я бы ожидал, что оно будет уничтожено, а различные потоки завершатся.Это тот случай, если я закомментирую блок try / catch «Make a TrayIcon».
Кажется, что строка sysTray.add () не создает исключение, но наличие в коде останавливает завершение потоков, поскольку код зависает в функции wait () в потоке AWT-EventQueue.
Это ошибка или что-то, чего мне не хватает?
Приветствует всех.