簡體   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