どのようにその日の漁AWTのスレッドの例外がJava?
-
01-07-2019 - |
質問
私たちのように微量に利用ログのこれらの例外によりデフォルトのJavaだけ出力します。
解決
あとキャッチされたと見なされない例は、米国東部時間外の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())
}
}
他のヒント
以来、Java7にやらなければいけないということで異なるとして sun.awt.exception.handler
ハックは動作しなくなります。
ここでは溶液 ( キャッチされたと見なされAWT例外のJava7).
// 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());
}
});
少したほか、 shemnons anwer:
は今回が初めてキャッチされたと見なされRuntimeException(またはエラーが発生した米国東部夏時間では、物件"日(日)awt.ます。ハンドラ"のように負荷のに関連するクラス物件です。EDTニーズに、ハンドラをデフォルトのコンストラクタ、それ以外の米国東部時間利用させています。
が必要な場合により動態の取り扱い物語になれることだから、これからい静事業では、クラスのインスタンスが作成による米国東部時間がないの機会にアクセスの他のすべてに対応します。ここでは例外ハンドラーコードからスイングの枠組みを利用しています。述したもので、Java1.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);
}
}
希望です。
方法が二つあります:
- /*付ねじになります。UncaughtExceptionHandlerをEDT*/
- 設定システムプロパティ:システム。setProperty("sun.awt.ます。ハンドラ",MyExceptionHandler.クラスです。getName());
わからない場合には後者の作品では非日jvms.
--
実際、最初は正しくありませんでみ機構を検出するクラッシュした。
所属していません StackOverflow