Java 捕获第三方代码中的运行时异常

Java 捕获第三方代码中的运行时异常,java,runtimeexception,Java,Runtimeexception,我开发了一个框架,允许其他人插入优化器的不同实现。这些优化器是异步运行的,我在异步代码中附加了在前后运行的侦听器,以监视优化器的执行。例如: public void async(Optimizer o){ runListeners(o); o.run(); runListeners(o); } 我的问题是一些懒惰的程序员在他们的代码中抛出了一些NullPointerExceptions,并阻止该方法第二次执行侦听器。我想抓住 RunTimeExp>,但这对我来说是错误的。 每

我开发了一个框架,允许其他人插入优化器的不同实现。这些优化器是异步运行的,我在异步代码中附加了在前后运行的侦听器,以监视优化器的执行。例如:

public void async(Optimizer o){
   runListeners(o);
   o.run();
   runListeners(o);
}

我的问题是一些懒惰的程序员在他们的代码中抛出了一些
NullPointerExceptions
,并阻止该方法第二次执行侦听器。我想抓住<代码> RunTimeExp><代码>,但这对我来说是错误的。

每当你为插件创建一个运行框架时,你必须考虑如何处理插件所引发的异常,因为你通常不希望一个行为不好的插件破坏你的整个程序。捕获异常、RunTimeExpRead,或者甚至可以抛出此处没有什么错误(虽然错误可能仍然是中止的原因)。< / P> < P> >您为插件创建一个运行框架时,必须考虑如何处理插件所引发的异常,因为你通常不希望一个表现糟糕的插件使你的整个程序崩溃。在这里捕获异常、RuntimeException或甚至可以丢弃(尽管错误可能仍然是中止的原因)。

如果您想捕获所有内容,只需捕获所有
Throwable
或至少
Exception
。在程序的顶层/调度层/运行层,这并没有错。我试图不让JVM行为不端。例如,如果出现了OutOfHeapspace或其他一些非常糟糕的错误。如果您想捕获所有内容,只需捕获所有
Throwable
或至少
异常即可。在程序的顶层/调度层/运行层,这并没有错。我试图不让JVM行为不端。就像有一个OutOfHeapspace或其他非常严重的错误。@user673289:这是一个判断调用。对我来说,这取决于我是否想尝试从错误中恢复过来。也许你可以选择你能处理的。@user673289:这是一个判断电话。对我来说,这取决于我是否想尝试从错误中恢复过来。也许可以选择你能处理的事情。
runListeners(o);
try {
  o.run();
} finally {
  runListeners(o);  // this will get run even if you get NPE
  // now your program crashes with the NPE :)
}