これらの例外のアプリケーションログにトレースが必要です。デフォルトでは、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. Xcodeで捕捉されない例外をデバッグする
- 4. Javaで捕捉する必要がない例外をどのように持つか?
- 5. Javaでスタックオーバーフローを捕捉して回復するにはどうすればよいですか?
- 6. Objective-Cの別のスレッドのあるスレッドからスローされた例外を捕捉できますか?
- 7. VS2010でデバッグモードで捕捉された未処理の例外を分析するにはどうすればよいですか?
- 8. 例外の捕捉順序は?
- 9. Pythonでimaplib例外を捕捉する(IMAPClientパッケージを使用)
- 10. 未処理の例外がC#で捕捉されない
- 11. レールのアプリケーションコントローラでMysql :: Error例外を捕捉する方法2.3.8
- 12. レールでフェイルセーフ例外を捕捉する方法2.3.8
- 13. 拡張forループで例外を捕捉し、このループのプロセスを再開するにはどうすればよいですか?
- 14. ポインタによって捕捉された再スロー例外
- 15. 例外スレッドで "AWT-EventQueueの-0" スレッド "AWT-EventQueueの-0" ます。java.lang.UnsatisfiedLinkErrorで
- 16. facebook sdkからスローされた例外メッセージを捕捉して変更するにはどうすればいいですか?
- 17. オブジェクトインスタンスでスローされた例外をグローバルに捕捉する方法
- 18. この例外を解決するにはどうすればいいですか?スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException
- 19. catchブロックでスローされた例外は、後でcatchブロックによって捕捉されますか?
- 20. Javaでスレッドを使用するにはどうすればよいですか?
- 21. Javaでスレッドをプロファイルするにはどうすればよいですか?
- 22. コントローラの例外捕捉を簡略化する
- 23. 匿名スレッドで例外を宣言するにはどうすればよいですか?
- 24. PHPで外部イベントを捕捉するには?
- 25. スクリプトブロックで例外をキャッチするにはどうすればよいですか?
- 26. @ExceptionHandlerから例外をスローして別のハンドラで捕捉する
- 27. デフォルトのipython例外ハンドラで捕捉された例外オブジェクトに手を差し伸べるには?
- 28. Python:例外を捕捉する際にコードの重複を避けるには?
- 29. 親スレッドから例外を通知するにはどうすればよいですか?
- 30. Javaスレッドを停止するにはどうすればよいですか?
throwableをキャッチする必要はありません。無限ループはありません。 java.awt.EventDispatchThread.handleExceptionが例外をキャッチしています。 –
そこに 'クラスAWTExceptionHandler' –