我正在为我的工作学习程序编写一个Java程序,该程序依赖于RXTX串行驱动程序。它在我的测试机器上运行良好,但是我注意到当在没有安装RXTX的机器上运行时,应用程序无法打开。在控制台中,它为“gnu / io / CommPortIdentifier”抛出了“java.lang.NoClassDefFoundError”异常。我将它放入try / catch中,以便它向用户显示一条消息,告诉他们检查他们的RXTX驱动程序安装,而不是简单地退出程序。然而它实际上并没有这样做,只要它碰到那条线就会关闭。有任何想法吗?谢谢!
编辑:ya的一些代码:
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”行是抛出错误的行
答案 0 :(得分:4)
这是因为您尝试捕获Exception
NoClassDefFoundError
的父类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;
}
,请参阅JavaDoc。改为抓住具体的异常类。
更好的方法是检查驱动程序本身的可用性。例如:
{{1}}
答案 1 :(得分:4)
java.lang.Error
州
错误是 Throwable 的子类 这表明存在严重的问题 合理的应用应该不是 试着抓住。大多数此类错误都是 异常情况。
java.lang.NoClassDefFoundError
扩展LinkageError
(扩展Error
)。你不应该在try-catch块中捕获任何Error
。
在执行其余代码之前,您必须编写一个代码来检查是否先安装了RXTX。
答案 2 :(得分:1)
这是因为NoClassDefFoundError
扩展了Error
(不 Exception
)。
最好的方法是抓住NoClassDefFoundError
本身。您还可以抓住Error
或Throwable
。