FEST-Swingを利用する(7) EDTで発生した例外をJUnitで検知するの追補
EDTで発生した例外のハンドラをカスタム化するにはsun.awt.exception.handlerプロパティを使用する、と以前記載した。
先日リリースされたFEST-Swing 1.2a4では、カスタム化するためのクラスAWTExceptionHandlerInstallerが用意されたようだ。こちらを使用する方が良いかもしれない。ただし、実装上は、内部で上記プロパティを利用しているので差異は無い。
これに関連してJavaのBug ID:4714232 RFE: replace sun.awt.exception.handler system property with official API の存在を知ったのだが、Java7ではこのプロパティを用いる方法を採らなくても良くなるらしい(EDTも通常のスレッド同様setUncaughtExceptionHandlerメソッドを使えばよくなる?)。
追記:
現在のバージョンでも特定の条件下以外はsetUncaughtExceptionHandlerで問題ないようだ。特定の条件というのは、モーダルダイアログが表示されている状態であり、この状態では設定した例外ハンドラが使用されない、というバグらしい。下記のコードは、1.6.0_14-b08では確かにハンドラが用いられていない。1.7.0-ea-b78では想定通りの動作となった(関連バグ BugID:6727884 Some Uncaught Exceptions are no longer getting sent to the Uncaught Exception Handlers より)。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
public MyFrame() {
super();
setTitle("メインウィンドウ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b = new JButton("起動");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog d = new JDialog(MyFrame.this, "モーダルダイアログ");
d.setModal(true);
JButton b2 = new JButton("例外");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
throw new RuntimeException("例外送出");
}
});
d.add(b2);
d.pack();
d.setVisible(true);
}
});
add(b);
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MyFrame().setVisible(true);
// EDT例外ハンドラの設定
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("キャッチされなかった例外:" + e.getMessage() + "(" + t.getName() + ")");
}
});
}
});
}
}
« ネットワークスペシャリスト試験に合格した | トップページ | さきゅばすのNicoBrowser拡張ver.1.3.5 実行可能ファイル配布 »
この記事へのコメントは終了しました。
トラックバック
この記事へのトラックバック一覧です: FEST-Swingを利用する(7) EDTで発生した例外をJUnitで検知するの追補:
» FEST-Swingを利用する(8) 視覚の威力 [雪羽の発火後忘失]
期間があいた割にネタが用意できていないので、今回は総集編、回想回です… 過去FEST-Swingに関して記述したエントリを以下に示します。 FESTを使用してJava GUI (Swing)のテストを実行してみる FEST-Swingの紹介。FEST-Swingの機能概要を、簡単なサンプルをもとにして実行してみます。 NetBeansでFEST-Swingを利用する その1 インストール 実際にF... [続きを読む]
« ネットワークスペシャリスト試験に合格した | トップページ | さきゅばすのNicoBrowser拡張ver.1.3.5 実行可能ファイル配布 »
コメント