[英]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.