(以下のコード例は自己完結型で実行可能です。試してみてください。システムがクラッシュすることはありません:)
Tom Hawtin は、ここの質問についてコメントしました:なぜ人々はイベント キューで Java GUI を実行するのですか?
それ:
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 が自動的に再起動されますか、またはTom Hawtin がコメントしたように、チェックされていない例外が「キャッチされ、ダンプされ、スレッドが続行されます」 ?
ここで何が起こっているのですか?