簡體   English   中英

防止NoClassDefFoundError崩潰程序

[英]Prevent NoClassDefFoundError from crashing program

我正在為我的工作學習程序編寫一個Java程序,該程序依賴於RXTX串行驅動程序。 它在我的測試機器上運行良好,但是我注意到當在沒有安裝RXTX的機器上運行時,應用程序無法打開。 在控制台中,它為“gnu / io / CommPortIdentifier”拋出了“java.lang.NoClassDefFoundError”異常。 我將它放入try / catch中,以便它向用戶顯示一條消息,告訴他們檢查他們的RXTX驅動程序安裝,而不是簡單地退出程序。 然而它實際上並沒有這樣做,只要它碰到那條線就會關閉。 有任何想法嗎? 謝謝!

編輯:雅的一些代碼:

Enumeration sportsAll = null;
Vector<String> v = new Vector();
SerialPort sp;
CommPortIdentifier portID;
String currString;

try {
    sportsAll= CommPortIdentifier.getPortIdentifiers();
} catch (Exception e) {
    v.addElement("Check RXTX Drivers");
}

“sportsAll = CommPortIdentifier”行是拋出錯誤的行

這是因為您嘗試捕獲不是NoClassDefFoundError的父類的Exception ,請參閱JavaDoc 請改為捕獲具體的異常類。

更好的方法是檢查驅動程序本身的可用性。 例如:

private static boolean isDriverAvailable() {    
    boolean driverAvailable = true;

    try {
        // Load any class that should be present if driver's available
        Class.forName("gnu.io.CommPortIdentifier");
    } catch (ClassNotFoundException e) {
        // Driver is not available
        driverAvailable = false; 
    }

    return driverAvailable;
}

java.lang.Error狀態

Error是Throwable的子類,表示合理的應用程序不應該嘗試捕獲的嚴重問題。 大多數此類錯誤都是異常情況。

並且java.lang.NoClassDefFoundError擴展了LinkageError (擴展了Error )。 你不應該在try-catch塊中捕獲任何Error

在執行其余代碼之前,您必須編寫代碼以檢查是否先安裝了RXTX。

這是因為NoClassDefFoundError擴展了Error不是 Exception )。

最好的方法是捕獲NoClassDefFoundError本身。 您還可以捕獲ErrorThrowable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM