Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行jar文件方法并检索return_Java - Fatal编程技术网

Java 执行jar文件方法并检索return

Java 执行jar文件方法并检索return,java,Java,我正在构建一个允许使用安装应用程序的平台。这些应用程序将是一个编译过的java程序(.jar)文件,主平台应该能够从中读取set方法 到目前为止,经过数英里的研究,我发现在这个过程中存在很多安全缺陷,但我想不出任何其他解决方法 我得到这个错误: java.lang.ClassNotFoundException:iezon.app.SettingsApp 这是我读取app.jar文件的方式: Class<?> app = Class.forName( "iezon.app.Se

我正在构建一个允许使用安装应用程序的平台。这些应用程序将是一个编译过的java程序(.jar)文件,主平台应该能够从中读取set方法

到目前为止,经过数英里的研究,我发现在这个过程中存在很多安全缺陷,但我想不出任何其他解决方法

我得到这个错误:

java.lang.ClassNotFoundException:iezon.app.SettingsApp

这是我读取app.jar文件的方式:

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();
    }
}
}