Java 执行jar文件方法并检索return
我正在构建一个允许使用安装应用程序的平台。这些应用程序将是一个编译过的java程序(.jar)文件,主平台应该能够从中读取set方法 到目前为止,经过数英里的研究,我发现在这个过程中存在很多安全缺陷,但我想不出任何其他解决方法 我得到这个错误: java.lang.ClassNotFoundException:iezon.app.SettingsApp 这是我读取app.jar文件的方式:Java 执行jar文件方法并检索return,java,Java,我正在构建一个允许使用安装应用程序的平台。这些应用程序将是一个编译过的java程序(.jar)文件,主平台应该能够从中读取set方法 到目前为止,经过数英里的研究,我发现在这个过程中存在很多安全缺陷,但我想不出任何其他解决方法 我得到这个错误: java.lang.ClassNotFoundException:iezon.app.SettingsApp 这是我读取app.jar文件的方式: Class<?> app = Class.forName( "iezon.app.Se
Class<?> app = Class.forName(
"iezon.app.SettingsApp",
true,
new URLClassLoader (new URL[] {
new URL("file://C://Temp/SettingsApp.jar")
},
ClassLoader.getSystemClassLoader())
);
该文件确实存在于临时目录中,并且有一个名为SettingsApp
的JPanel类的包iezon.app
,其代码如下:
public SettingsApp() {
setBounds(0, 0, 584, 462);
setLayout(null);
JPanel panel = new JPanel();
panel.setBounds(0, 0, 450, 300);
add(panel);
panel.setLayout(null);
JLabel lblSettings = new JLabel("SETTINGS APP V2");
lblSettings.setBounds(107, 11, 249, 29);
lblSettings.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 19));
panel.add(lblSettings);
}
public JPanel run(Locale l) {
return this;
}
请告诉我,这方面的任何帮助都会非常充分,或者指向实现这一点的另一种方式。
java.lang.NoSuchMethodException:iezon.app.SettingsApp.run()
当我执行(JPanel)m.invoke(cls.newInstance(),new Locale(“,”,”)代码>但是,它确实引用了这个类!谢谢你!当我输出cls.getMethods()
时,我得到了这个[Ljava.lang.reflect.Method;@4D887EC1,所以我没有执行run()
方法,而是将Class cls=clsLoader.loadClass(“testeJar.TestClass”);
的实例存储为(JPanel)
效果很好!再次感谢!为了减少安全漏洞,您可以使用一个。感谢@Bohemian!这正是我一直在寻找的!
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class CustomClassLoader {
public static void main(String[] args) {
try {
URLClassLoader clsLoader = URLClassLoader.newInstance(new URL[] {new URL("file:/C://ambienteDesenv/bitbucket/testJar.jar")});
Class cls = clsLoader.loadClass("testeJar.TestClass");
Method m = cls.getMethod("getValue");
Object a = m.invoke(cls.newInstance());
System.out.println(a);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | MalformedURLException | InstantiationException e) {
e.printStackTrace();
}
}
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class CustomClassLoader {
public static void main(String[] args) {
try {
URLClassLoader clsLoader = URLClassLoader.newInstance(new URL[] {new URL("file:/C://ambienteDesenv/bitbucket/testJar.jar")});
Class cls = clsLoader.loadClass("testeJar.TestClass");
Method m = cls.getMethod("getValue");
Object a = m.invoke(cls.newInstance());
System.out.println(a);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | MalformedURLException | InstantiationException e) {
e.printStackTrace();
}
}
}