防止NoClassDefFoundError崩溃程序

时间:2011-03-31 17:24:35

标签: java serial-port noclassdeffounderror rxtx

我正在为我的工作学习程序编写一个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”行是抛出错误的行

3 个答案:

答案 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本身。您还可以抓住ErrorThrowable