2

配布するライセンスがない商用APIライブラリを使用しています。

アプリケーションを機能させるには、アプリケーションのエンドユーザーがライブラリをインストールしてクラスパスに含める必要があります。jar以外にも、LD_LIBRARY_PATHに他のファイルが含まれている必要があります。

前提条件がインストールされていて、使用しているオブジェクトが正しく機能していることを確認するために、起動時にテストを実行したいと思います。そうでない場合は、指示を含むユーザーフレンドリーなメッセージを返すか、何らかの修正を実行します。(ライブラリがインストールされている場所をユーザーに尋ねたり、起動スクリプトにいくつかの変数を書き込んだりするようなものです)。

ClassLoader.loadClassを見つけたので、これを使用する必要があると思いますが、ユースケースを詳しく説明する例を見つけることができず、直接使用してもよいかどうかわかりません。

loadClassが成功した場合、クラスオブジェクトをインスタンス化し、それを使用してLD_LIBRARY_PATHが正しく設定されているかどうかを判断する必要があると思います。

助けていただければ幸いです。

4

3 に答える 3

4

例外をスローするメソッドが必要です。その中でキャッチClassNotFoundExceptionまたはNoClassDefFoundError

        public void testCatchException() {
            try {
                checkClassesExisting();
            } catch (ClassNotFoundException ex) {
                // TODO handle exception
            } catch (NoClassDefFoundError ex) {
                // TODO handle exception
            } catch (Exception ex) {
                // other error
            }
        }


        public void checkClassesExisting() throws Exception {
            // instantiate here the class in doubt
            Dummy = new Dummy("xx");
        }

NoClassDefFoundErrorの追加情報

于 2013-02-01T21:39:42.953 に答える
2

自分のライブラリを使用するためにサードパーティのライブラリを購入する必要がある場合は、実際には何もしないでください。ClassNotFoundException が一番上に来るようにします。例外は、どのライブラリが欠落しているかを示します。

ClassNotFoundException をキャッチし、ライブラリ内のクラスに構成上の問題がある場合、この不足しているサード パーティ ライブラリであると思われるものによってマスクされます。

于 2013-02-02T06:19:12.960 に答える
1

jar が利用可能かどうかを調べるためにClass.forName、その jar からクラスをロードしようとするために使用します。

ネイティブ ライブラリがそれらをラップするクラスの静的ブロックで初期化/チェックされている場合、同じ方法がそれらに対しても機能するはずです。

于 2013-02-01T21:39:02.347 に答える