私がやろうとしていて、何日もその方法を研究してきたのは、これが機能するために、フォルダーを調べてそこにあるすべてのjarを動的にロードするマザーjarを用意することです(実際にはそれらについて知る必要はありません)。というプラグイン内のファイルが必要ですplugin
。現在、プラグインを起動できるワーキング クラス ローダーがありますが、ファイルを読み取ることができませんplugin
。
ここに私の現在のコードがあります:
Load.class
Load(JMenuBar Bar) {
ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
ClazzL = new URLClassLoader(new URL[]{new File("/home/grant/plugins/MenuPlugin.jar").toURL()}, currentThreadClassLoader);
Thread.currentThread().setContextClassLoader(ClazzL);
in = new BufferedReader(new InputStreamReader(ClazzL.getClass().getClassLoader().getResourceAsStream("/menuplugin/plugin")));
System.out.println("in: " + in.readLine());
Class c = ClazzL.loadClass("menuplugin.Main");//this works and loads properly
//it is just that it needs to
//load from `plugin` using
//in.readLine();
API obj = (API) c.newInstance();
obj.run(Bar);
}
エラーは(44行目:in = new Buffered ....)
Exception in thread "main" java.lang.NullPointerException
at menuaddon.Load.<init>(Load.java:42)
at menuaddon.Menuaddon.main(Menuaddon.java:39)
Java Result: 1
多くの助けに感謝
完成した作業コードは次のとおりです。
ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
ClazzL = new URLClassLoader(new URL[]{new File("/home/grant/plugins/MenuPlugin.jar").toURL()}, currentThreadClassLoader);
Thread.currentThread().setContextClassLoader(ClazzL);
in = new BufferedReader(new InputStreamReader(ClazzL.getResourceAsStream("plugin")));
classpath = in.readLine();
Class c = ClazzL.loadClass(classpath);
API obj = (API) c.newInstance();
obj.run(Bar);