Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止NoClassDefFoundError导致程序崩溃_Java_Serial Port_Noclassdeffounderror_Rxtx - Fatal编程技术网

Java 防止NoClassDefFoundError导致程序崩溃

Java 防止NoClassDefFoundError导致程序崩溃,java,serial-port,noclassdeffounderror,rxtx,Java,Serial Port,Noclassdeffounderror,Rxtx,我正在为我的勤工俭学程序编写一个Java程序,它依赖于RXTX串行驱动程序。它在我的测试机器上运行良好,但是我注意到,当在没有安装RXTX的机器上运行时,应用程序无法打开。在控制台中,它抛出了“gnu/io/CommPortIdentifier”的“java.lang.NoClassDefFoundError”异常。我将其放入try/catch中,这样它就会向用户显示一条消息,告诉他们检查RXTX驱动程序的安装,而不是简单地退出程序。然而,它实际上并没有做到这一点,当它到达那条线时,仍然只是关闭

我正在为我的勤工俭学程序编写一个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=null;
向量v=新向量();
串行端口sp;
通信识别器端口;
字符串currString;
试一试{
sportsAll=CommPortIdentifier.getPortIdentifiers();
}捕获(例外e){
v、 附录(“检查RXTX驱动程序”);
}

“sportsAll=CommPortIdentifier”行是引发错误的行,这是因为您试图捕获
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;
}

这是因为
NoClassDefFoundError
扩展了
Error
异常


最好的方法是捕获
NoClassDefFoundError
本身。您还可以捕获
Error
Throwable

java.lang.Error
状态

错误是Throwable的一个子类 这表明严重的问题 合理应用应不合理 试着抓住。大多数这样的错误是错误的 异常情况

java.lang.NoClassDefFoundError
扩展了
LinkageError
(扩展了
Error
)。您不应该在try-catch块中捕获任何
错误


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

此代码是用所有可用串行端口填充下拉列表的方法的一部分。如果它捕获到此异常,我想将“检查RXTX驱动程序”添加到该下拉列表中,如捕获括号中所示。虽然捕获
NoClassDefFoundError
将防止应用程序崩溃,但它可能会掩盖其他错误。最好找到另一种方法来确定是否安装了RXTX驱动程序。