Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 捕获NetBeans环境中的EDT异常_Java_Maven_Netbeans_Exception Handling_Event Dispatch Thread - Fatal编程技术网

Java 捕获NetBeans环境中的EDT异常

Java 捕获NetBeans环境中的EDT异常,java,maven,netbeans,exception-handling,event-dispatch-thread,Java,Maven,Netbeans,Exception Handling,Event Dispatch Thread,我想捕获所有未捕获的异常并打开一个对话框。首先,我从NetBeans中删除了默认异常处理程序,并将我的处理程序添加为默认处理程序: java.util.logging.Logger global = java.util.logging.Logger.getLogger(""); for (Handler handler : global.getHandlers()) { if (handler.getClass().getName().equals("org.netbeans.core.st

我想捕获所有未捕获的异常并打开一个对话框。首先,我从NetBeans中删除了默认异常处理程序,并将我的处理程序添加为默认处理程序:

java.util.logging.Logger global = java.util.logging.Logger.getLogger("");
for (Handler handler : global.getHandlers()) {
  if (handler.getClass().getName().equals("org.netbeans.core.startup.TopLogging$LookupDel"))
  {
    global.removeHandler(handler);
    break;
  }
}
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
处理程序如下所示:

public static final class ExceptionHandler implements UncaughtExceptionHandler
{

  @Override
  public void uncaughtException(Thread thread, Throwable throwable)
  {
    logger.error(throwable.getMessage(), throwable);
    ExceptionViewPanel.showException(throwable);
  }
}
使用该构造,我只能捕获在EDT之外抛出的异常。我读过关于ThreadGroup的文章,但我不能使用这个解决方案,因为我们在Maven中使用NetBeans,所以我不能用ThreadGroup包装开始线程。来自1.7之前版本的黑客攻击也不再可能,覆盖EventQueue也没有效果

我尝试过很多解决方案,但都不奏效。有没有人能为我提供另一个可行的解决方案

提前谢谢


Teazl

在我自己的项目中,我已经将NetBeans错误处理程序替换为我自己的。我的例子是:

@ServiceProvider(service = Handler.class, supersedes = "org.netbeans.core.NbErrorManager")
public class MyHandler extends Handler {
    @Override
    public void publish(LogRecord record) {
        if (record.getThrown() != null) {
            record.getThrown(); // do with it something
        }
    }

    @Override
    public void flush() {

    }

    @Override
    public void close() throws SecurityException {

    }
}
另请参见org.netbeans.core.NbErrorManager和org.netbeans.core.notifyexpanel,了解netbeans如何使用默认处理程序

您只需要在项目中添加此类