2

我正在为我的勤工俭学编写一个 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”行是引发错误的行

4

3 回答 3

4

这是因为您尝试捕获Exception不是父类的NoClassDefFoundError查看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;
}
于 2011-03-31T17:34:29.763 回答
4

java.lang.Error状态

Error 是Throwable的子类 ,表示合理的应用程序不应尝试捕获的严重问题。大多数此类错误是异常情况。

java.lang.NoClassDefFoundError延伸LinkageError(延伸Error)。你不应该Error在 try-catch 块中捕获任何东西。

在执行其余代码之前,您必须编写代码来检查是否先安装了 RXTX。

于 2011-03-31T17:34:58.083 回答
1

这是因为NoClassDefFoundError扩展Error不是 Exception)。

最好的办法是抓住NoClassDefFoundError自己。您也可以捕获ErrorThrowable

于 2011-03-31T17:34:43.757 回答