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