我使用的是一个创建自己线程的库,它引发了一个异常。如何捕捉异常?异常在下面标记的行上引发:
ResourceDescriptor rd = new ResourceDescriptor();
rd.setWsType(ResourceDescriptor.TYPE_FOLDER);
fullUri += "/" + token;
System.out.println(fullUri);
// >>> EXCEPTION THROWN ON THE FOLLOWING LINE <<<
rd.setUriString(fullUri.replaceAll("_", ""));
try{
rd = server.getWSClient().get(rd, null);
}catch(Exception e){
if(e.getMessage().contains("resource was not found")){
this.addFolder(fullUri, label, false);
System.out.println("Folder does not exist, will be added now.");
}else{
System.out.println("Error Messages: " + e.getMessage());
}
}
如果只有一个Thread
对象,那么就无法捕获任何异常(我假定是RuntimeException
)。正确的方法是使用ExecutorService
使用的Future<?>
类,但我认为您无法控制启动线程
的代码。
如果您正在提供runnable
,或者如果您正在向库中注入任何代码,那么您可以将其包装在一个为您捕获并保存exception
的类中,但这仅限于异常在您的代码中或从您正在调用的代码中引发的情况。类似以下内容:
final AtomicReference<Exception> exception = new AtomicReference<Exception>();
Thread thread = library.someMethod(new Runnable() {
public void run() {
try {
// call a bunch of code that might throw
} catch (Exception e) {
// store our exception thrown by the inner thread
exception.set(e);
}
}
});
// we assume the library starts the thread
// wait for the thread to finish somehow, maybe call library.join()
thread.join();
if (exception.get() != null) {
throw exception.get();
}
此外,如果您正在分叉自己的线程,还可以设置未捕获的异常处理程序:
thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
// log it, dump it to the console, or ...
}
});
问题内容: 我正在尝试编写一个使用PyQt5在系统托盘中运行的应用程序。该代码有时会引发异常,我需要能够捕获它们。 我希望当应用程序中发生异常时,会退出主事件循环,因此像这样捕获它应该起作用: 在下面的示例中,当我按下“提高”按钮时,我仅看到回溯,但从未看到打印过的内容。 有2个类似的问题,但是那里的答案并没有满足我的需要: 抓住PyQt中的任何异常:OP希望 监视 异常,不退出偶数循环。 防止P
本文向大家介绍Java多线程之多线程异常捕捉,包括了Java多线程之多线程异常捕捉的使用技巧和注意事项,需要的朋友参考一下 一:为什么要单独讲多线程的异常捕捉呢? 先看个例子: 在run中手动抛出了一个运行时异常,在main中启动线程,catch语句块中捕捉下异常,捕捉到打印一句话。运行结果如下图: 发现异常被抛到了控制台,没有打印catch块中的语句。 结论:多线程运行不能按照顺
例子: 我如何在mockito中执行此操作,并在强制抛出异常1后验证是否得到了异常2?
然后我把它用作: 但是最后一行代码没有捕获任何异常,我的代码给出运行时异常并停止。你能解释为什么会发生这种情况,如果可能的话,如何修复它吗?
问题内容: 我们希望在应用程序日志中跟踪这些异常-默认情况下,Java只会将它们输出到控制台。 问题答案: 在EDT中和EDT外,未捕获的异常之间存在区别。 另一个问题有一个解决方案,但是如果您只想咀嚼EDT部分的话…
问题内容: 我想捕获一个异常,该异常嵌套在另一个异常中。我目前正在这种方式: 有没有一种方法可以使此操作更高效,更优雅? 问题答案: 没有更优雅的方法来选择性地“捕获”嵌套异常。我想如果您做了很多这样的嵌套异常,就可以将代码重构为通用的实用程序方法。但是它仍然不会优雅或高效。 优雅的解决方案是消除异常嵌套。要么不首先将异常链接起来,要么(有选择地)解开包装并将嵌套的异常重新扔到堆栈的上方。 嵌套异