[英]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
本身。 您還可以捕獲Error
或Throwable
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.