これらの例外のアプリケーションログにトレースが必要です。デフォルトでは、Javaはコンソールにそれらを出力します。JavaでAWTスレッド例外を捕捉するにはどうすればよいですか?
17
A
答えて
10
EDT内とEDT外で、キャッチされない例外が区別されます。
Another question has a solution for bothあなただけEDT部分がアップ噛むたい場合は...
class AWTExceptionHandler {
public void handle(Throwable t) {
try {
// insert your exception handling code here
// or do nothing to make it go away
} catch (Throwable t) {
// don't let the exception get thrown out, will cause infinite looping!
}
}
public static void registerExceptionHandler() {
System.setProperty('sun.awt.exception.handler', AWTExceptionHandler.class.getName())
}
}
0
2つの方法があります。
- /* EDT上のThread.UncaughtExceptionHandlerをインストールします*/
- システムプロパティを設定: するSystem.setProperty( "sun.awt.exception.handler" は、 MyExceptionHandler.class.getName());
後者が非Sunのjvmsで動作するかどうかはわかりません。
-
確かに、最初はそれがクラッシュしたスレッドを検出するための唯一の手段だ、正しくありません。
3
shemnonのanwerに少し加え:
初めてキャッチされないのRuntimeException(またはエラー)で発生EDTはプロパティ "sun.awt.exception.handler"を探しており、プロパティに関連付けられたクラスを読み込もうとします。 EDTでは、Handlerクラスにデフォルトのコンストラクタが必要です。そうでなければ、EDTはそれを使用しません。
クラスをダイナミックに処理する必要がある場合は、クラスがEDTによってインスタンス化され、静的以外の他のリソースにアクセスする機会がないため、静的操作でこれを行う必要があります。ここでは、使用しているSwingフレームワークの例外ハンドラコードを示します。 Java 1.4用に書かれており、そこではかなりうまくいきました。
public class AwtExceptionHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(AwtExceptionHandler.class);
private static List exceptionHandlerList = new LinkedList();
/**
* WARNING: Don't change the signature of this method!
*/
public void handle(Throwable throwable) {
if (exceptionHandlerList.isEmpty()) {
LOGGER.error("Uncatched Throwable detected", throwable);
} else {
delegate(new ExceptionEvent(throwable));
}
}
private void delegate(ExceptionEvent event) {
for (Iterator handlerIterator = exceptionHandlerList.iterator(); handlerIterator.hasNext();) {
IExceptionHandler handler = (IExceptionHandler) handlerIterator.next();
try {
handler.handleException(event);
if (event.isConsumed()) {
break;
}
} catch (Throwable e) {
LOGGER.error("Error while running exception handler: " + handler, e);
}
}
}
public static void addErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.add(exceptionHandler);
}
public static void removeErrorHandler(IExceptionHandler exceptionHandler) {
exceptionHandlerList.remove(exceptionHandler);
}
}
希望します。
10
Java 7以降では、sun.awt.exception.handler
ハックがもう機能しないため、別の方法で行う必要があります。
Here is the solution(Uncaught AWT Exceptions in Java 7)。
// Regular Exception
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
// EDT Exception
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
// We are in the event dispatching thread
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler());
}
});
関連する問題
- 1. Twisted Deferredコールバックで例外を捕捉するにはどうすればよいですか?
- 2. UnknownHostExceptionが例外で捕捉されないのはなぜですか(java)?
- 3. 複数の例外をどのように捕捉できますか?
- 4. Javaでスタックオーバーフローを捕捉して回復するにはどうすればよいですか?
- 5. Javaで捕捉する必要がない例外をどのように持つか?
- 6. Xcodeで捕捉されない例外をデバッグする
- 7. javaのmainメソッドによってスローされた例外をどのように捕捉しますか?
- 8. BizTalkで捕捉された例外を送信するC#コード
- 9. Objective-Cの別のスレッドのあるスレッドからスローされた例外を捕捉できますか?
- 10. PostgreSQL:関数内で例外を捕捉する方法は?
- 11. VS2010でデバッグモードで捕捉された未処理の例外を分析するにはどうすればよいですか?
- 12. Java:スレッド「AWT-EventQueue-0」の例外java.lang.NullPointerException?
- 13. jqueryで文字列の各文字を捕捉するにはどうすればよいですか?
- 14. サブクラスを捕捉しないポイントカットを作成するにはどうすればよいですか?
- 15. 例外の捕捉順序は?
- 16. 以下のトリガーの例外をどのように捕捉しましたか?
- 17. Pythonでimaplib例外を捕捉する(IMAPClientパッケージを使用)
- 18. "ローカルで捕捉された例外の"スロー "を修正するには?
- 19. レールでフェイルセーフ例外を捕捉する方法2.3.8
- 20. レールのアプリケーションコントローラでMysql :: Error例外を捕捉する方法2.3.8
- 21. 拡張forループで例外を捕捉し、このループのプロセスを再開するにはどうすればよいですか?
- 22. PHP5.6サーバで例外が捕捉されない
- 23. 未処理の例外がC#で捕捉されない
- 24. 例外スレッドで "AWT-EventQueueの-0" スレッド "AWT-EventQueueの-0" ます。java.lang.UnsatisfiedLinkErrorで
- 25. ポインタによって捕捉された再スロー例外
- 26. objective-c例外がスキャッチで捕捉されない3キャッチハンドラを実行する
- 27. facebook sdkからスローされた例外メッセージを捕捉して変更するにはどうすればいいですか?
- 28. この例外を解決するにはどうすればいいですか?スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException
- 29. オブジェクトインスタンスでスローされた例外をグローバルに捕捉する方法
- 30. 例外が「スレッドが待機状態から中断されました」のような例外を捕捉するためにthrowされません
throwableをキャッチする必要はありません。無限ループはありません。 java.awt.EventDispatchThread.handleExceptionが例外をキャッチしています。 –
そこに 'クラスAWTExceptionHandler' –