(приведенный ниже пример кода является автономным и работоспособным, вы можете попробовать его, он не сломает вашу систему:)
Том Хотин прокомментировал вопрос здесь: Почему люди запускают графический интерфейс Java в очереди событий
, что:
Маловероятно, что EDT потерпит крах.Непроверенные исключения, сгенерированные в диспетчеризации EDT, перехватываются, сбрасываются и поток продолжается.
Может кто-нибудь объяснить мне, что здесь происходит (каждый раз, когда вы нажимаете «выбрасывать непроверенное исключение»)Кнопка , намеренно делится на ноль):
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class CrashEDT extends JFrame {
public static void main(String[] args) {
final CrashEDT frame = new CrashEDT();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing( WindowEvent e) {
System.exit(0);
}
});
final JButton jb = new JButton( "throw an unchecked exception" );
jb.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.out.println( "Thread ID:" + Thread.currentThread().getId() );
System.out.println( 0 / Math.abs(0) );
}
} );
frame.add( jb );
frame.setSize(300, 150);
frame.setVisible(true);
}
}
Я получаю следующее сообщение (что я и ожидал):
Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: / by zero
идля меня это неконтролируемое исключение, верно?
Вы можете видеть, что ID потока увеличивается каждый раз, когда вы вызываете сбой.
Так что EDT автоматически перезапускается каждый раз, когда неконтролируемое исключениевыброшенные или непроверенные исключения "перехвачены, сброшены и поток продолжается" , как прокомментировал Том Хотин?
Что здесь происходит?