1

外部の.jarファイルからクラスを取得する際に問題が発生しました。ここで外部.jarをロードするこのメソッドを見つけましたが、実行するたびにClassNotFoundExceptionが発生します。以下は私が使用しているコードであり、これは私がテストしている.jarです。誰かがこれを修正する方法について何か考えがあれば、教えてください。ありがとう!

これが私のコードです:

@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public void loadJar() throws MalformedURLException {
    URL[] classes = {new URL("jar:file://test.jar!/")};
    URLClassLoader child = new URLClassLoader (classes, this.getClass().getClassLoader());
    try {
        Class classToLoad = Class.forName ("test.PackageTest", true, child);
        Method method = classToLoad.getDeclaredMethod ("test");
        Object instance = classToLoad.newInstance();
        Object result = method.invoke(instance);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}
4

2 に答える 2

1

URLにjar:と!/を付けずに試してください。

于 2012-03-26T23:49:10.017 に答える
1

URL[] classes = {new URL("jar:file://test.jar!/")};いくつかのステートメントに分割してみてください

File myFile = new File("test.jar");
URL myJarFileURL = new URL("jar", "", "file:" + myFile.getAbsolutePath() + "!/");
URL[] classes = {myJarFileURL};

myFile.getAbsolutePath()をロガーまたはコンソールに送信して、クラスローダーがtest.jarを見つけることを期待している場所を確認できます。次に、test.jarがその場所にあることを確認します。

于 2012-03-27T00:29:58.783 に答える