2

RXTX シリアル ドライバに依存する作業学習プログラム用の Java プログラムを作成しています。テスト マシンでは問題なく動作していますが、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

これは、 see JavaDocExceptionの親クラスではないものをキャッチしようとするためです。代わりに具体的な例外クラスをキャッチしてください。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;
}
于 2011-03-31T17:34:29.763 に答える
4

java.lang.Error状態

Error は、Throwableのサブクラスであり、合理的なアプリケーションがキャッチしようと すべきではない重大な問題を示します。このようなエラーのほとんどは異常な状態です。

And java.lang.NoClassDefFoundErrorextends LinkageError(これは を拡張しますError)。Errortry-catch ブロックではまったくキャッチしないでください。

残りのコードを実行する前に、RXTX が最初にインストールされているかどうかを確認するコードを作成する必要があります。

于 2011-03-31T17:34:58.083 に答える
1

これはNoClassDefFoundError拡張されているError(ない Exception) ためです。

NoClassDefFoundError最善の方法は、それ自体をキャッチすることです。Errorまたは のいずれかをキャッチすることもできますThrowable

于 2011-03-31T17:34:43.757 に答える