繁体   English   中英

try-catch-block中的异常未在Java中捕获

[英]Exception in try-catch-block is not caught in Java

我对Java很陌生,偶然发现了一个问题,我无法理解(我正在使用Eclipse Luna进行开发和执行):

我调用了一个可能引发错误并用try-catch-block包围的方法:

try {
  transaction.execute();                
} catch (ModbusIOException e) {
  log.debug("Fehler bei Modbustransaction: ModbusIOException - " + e.getMessage());
  e.printStackTrace();
} ... // more catches

实际上,执行方法将引发ModbusIOException-但未将其捕获在catch块中。 在控制台中,我得到以下输出:

net.wimpi.modbus.ModbusIOException:在net.wimpi.modbus.io.ModbusTCPTransaction.execute(ModbusTCPTransaction.java:193)的net.wimpi.modbus.io.ModbusTCPTransport.readResponse(ModbusTCPTransport.java:180)处读取失败.vksys.modbusclient.ModbusClient.getPlantState(ModbusClient.java:121)位于de.vksys.modbusclient.ReconnectingModbusClient.main(ReconnectingModbusClient.java:36)

如果我单击带有getPlantState的行,则Eclipse在上面的try代码块中标记该行。 但是为什么它没有被抓住呢? 我还在catch块中检查了ModbusIOException的全名,并且是相同的... net.wimpi.modbus.ModbusIOException。

任何想法,可能是什么原因? 如果您需要更多代码来跟踪该问题,请告诉我。

提前致谢,
坦率

确实捕获了例外。 您只打印了堆栈跟踪,这就是您在标准输出中看到的内容。

捕获异常并不意味着它不会维护堆栈跟踪,而处理异常意味着您需要对其进行编码,以便可以从异常中恢复(在您的情况下,这已经发生了,否则您的程序将进入父级调用您的方法回滚堆栈的方法(即在readResponse方法中),您可能会说发生了什么事情或您抛出了异常。 例如给出如下代码:

void myMethod() {
    try {
         methodThatThrowsIOException();
    } catch (IOException ioe) {
         ioe.printStackTrace();
    }
    System.out.println("I will be printed");

如果您没有捕获到异常,那么您将永远不会执行诸如“我将被打印”之类的打印语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM