繁体   English   中英

防止NoClassDefFoundError崩溃程序

[英]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本身。 您还可以捕获ErrorThrowable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM