[英]Prevent NoClassDefFoundError from crashing program
我正在为我的工作学习程序编写一个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”行是抛出错误的行
这是因为您尝试捕获不是NoClassDefFoundError
的父类的Exception
,请参阅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;
}
java.lang.Error
状态
Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题。 大多数此类错误都是异常情况。
并且java.lang.NoClassDefFoundError
扩展了LinkageError
(扩展了Error
)。 你不应该在try-catch块中捕获任何Error
。
在执行其余代码之前,您必须编写代码以检查是否先安装了RXTX。
这是因为NoClassDefFoundError
扩展了Error
( 不是 Exception
)。
最好的方法是捕获NoClassDefFoundError
本身。 您还可以捕获Error
或Throwable
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.