0

多くの人にとってうまくいったように見えるので、私が見つけたこのメソッド使用して、実行時にJarをプログラムのクラスパスに動的に追加しようとしています。使用すると、 (以下のコードでコメントされている)addPlugin()がスローされます。NoSuchMethodException

これを機能させるために何が欠けているのか誰か教えてもらえますか? 私はこれにあまり慣れていないので、以前に調べてみました。

public final class PluginLoader {
    private static final Class[] _PARAMS = new Class[] {URL.class};

    public static void addPlugin(File plugin) throws PluginException {
        URLClassLoader plLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
        Class plClass = URLClassLoader.class;
        try {
                Method m = plClass.getDeclaredMethod("addPlugin", _PARAMS); //ERROR HERE
                m.setAccessible(true);
                m.invoke(plLoader, new Object[] {plugin.toURI().toURL()});
        } catch (Exception ex) {
                ex.printStackTrace();
                throw new PluginException("ERROR: Could not add plugin '" + plugin.getName() + "' to System ClassLoader");
        }
    }
}

使用法:

PluginLoader.addPlugin(new File("../path/to/jar.jar"));
Constructor<?> cs = ClassLoader.getSystemClassLoader().loadClass("my.main.class.Main").getConstructor(String.class);
4

1 に答える 1

0

変化する:

Method m = plClass.getDeclaredMethod("addPlugin", _PARAMS);

に:

Method m = plClass.getDeclaredMethod("addURL", _PARAMS);
于 2013-10-24T03:15:57.397 に答える