我对Java线程、Runnable等相当陌生。因此,我想知道为什么下面的代码没有捕获异常?
Runnable r = () -> {
try {
job.print();
} catch (Exception e) {
e.printStackTrace();
}
};
if (job.printDialog()) {
Thread t = new Thread(r);
r.start();
}
阅读有没有一种方法可以使Runnable的run()引发异常,我收集到:
为什么会这样?对此问题的任何“简单”解释都将受到高度赞赏!
您可以从逻辑和编程的角度来回答这个问题。让我们从逻辑上开始:
您可以将线程视为“代码的独立执行器”,它完全独立于其他代码执行器,共享内存除外。您必须传递线程初始化的Runnable
“包装”线程必须执行的代码。由于没有“更高实例”可以捕获异常,因此在这些Runnable
s中抛出异常没有太大意义。
现在是编程的观点。以下代码片段类似于Java SE中定义接口的方式:
@FunctionalInterface
interface Runnable {
void run();
}
由于函数run()不会引发任何已检查的异常,因此不允许在run()中引发已检查的异常。由于Runnable是专为线程初始化而设计的,因此这非常有意义<然而,code>Callable包含一个throws子句,因为它们主要用于执行器,执行器确实能够处理异常。
正如您已经发现的那样,在Runnable
运行状态之外没有捕获任何东西。语言规范不断变化。今天可能有解释的东西明天可能会有其他东西。您可能会在为什么不能运行()Runnable抛出检查异常?中找到答案,特别是为什么添加了Callable
来捕获Future
的结果。
问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们
为什么Java中的一些异常不被捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。 我在线程“main”java中得到了一个 但这行得通 我在java中没有发现任何方法错误。lang.NoSuchMethodError: 我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?
我的用它的作用域启动coroutine 我的只处理一些逻辑,在本例中是某种验证器 然后我的只处理网络层/本地层 以下是我得到的错误日志: 错误直接指向显式的语句。
Twilio新手使用测试帐户。我按照这里列出的安装Twilio PHP的说明进行了安装:https://www.Twilio.com/docs/quickstart/php/sms 因为我得到了一个证书错误,所以我的主机提供程序建议我更改CURLOPT_SSL_VERIFYPEER=>false(从true改为true)。但现在我得到了这个错误。如何修复?:致命错误:未捕获异常“services_
@ControllerAdvice类是RestResponseEntityExceptionHandler.java。 我被告知,默认情况下spring boot应该返回如下所示的内容 我给它的不存在的路径是 我的控制器类是Breweries_Controller
我在我们的一个开发环境中得到了以下异常。但是它在另一个环境中工作得很好。无法抓住窍门。有人能帮忙吗?