EDT异常处理程序不使用
Thread.UncaughtExceptionHandler。而是调用具有以下签名的方法:
public void handle(Throwable thrown);
将其添加到中
MyExceptionHandler,它应该可以工作。
的“文档”可在中找到
EventDispatchThread,它是中的package-private类
java.awt。从javadoc
handleException()那里引用:
Sun多么希望您能找到这个,我不知道。
这是一个完整的示例,可捕获EDT内外的异常:
import javax.swing.SwingUtilities;public class Test { public static class ExceptionHandler implements Thread.UncaughtExceptionHandler { public void handle(Throwable thrown) { // for EDT exceptions handleException(Thread.currentThread().getName(), thrown); } public void uncaughtException(Thread thread, Throwable thrown) { // for other uncaught exceptions handleException(thread.getName(), thrown); } protected void handleException(String tname, Throwable thrown) { System.err.println("Exception on " + tname); thrown.printStackTrace(); } } public static void main(String[] args) { Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler()); System.setProperty("sun.awt.exception.handler", ExceptionHandler.class.getName()); // cause an exception on the EDT SwingUtilities.invokeLater(new Runnable() { public void run() { ((Object) null).toString(); } }); // cause an exception off the EDT ((Object) null).toString(); }}
那应该做。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)