运行外部java类(项目)

时间:2011-11-30 22:37:13

标签: java class project external execute

我想从java项目中运行外部Java项目(类)。我不是指任何程序(例如EXE文件)而是java类(项目)。

让我们考虑一下字符串中的类文件路径:

String = "C:\\test\\test.class";

3 个答案:

答案 0 :(得分:4)

这是ClassLoader的责任。如果您想要实例化/使用磁盘上的外部.class文件,那么一旦您了解可用的API,它就相对简单了:

File f = ...; // Folder containing the .class files

ClassLoader loader = new URLClassLoader(new URL[] { f.toURI().toURL() }, getClass().getClassLoader(););
for (File classFile : f.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.endsWith(".class");
    }
})) {
    try {
        String filename = classFile.getName();
        // Remove the .class extension
        Class<?> cls = loader.loadClass(filename.substring(0, filename.length() - 6));
        // Do something with the class
    } catch (Exception ex) {
        LOGGER.error("Unable to load plugin: " + ex.getMessage());
    }
}

答案 1 :(得分:2)

除了你那令人厌恶的语气之外,你好像想要某种插件结构。

基本上,你需要一个ClassLoader来加载你想要的类/库。加载后,您可以使用它们。

也许这有助于您:How to load a jar file at runtime

答案 2 :(得分:0)

&#34;运行&#34;另一个java程序是通过调用它的主要方法完成的。假设您有要运行的类net.tilialacus.TheProg,那么您可以(在您的其他java程序中)

String[] args = {"arg1", "arg2"}; 
net.tilialacus.TheProg.main(args);

或通过反射,如果在编译时不知道类:

    Class<?> theClass = Class.forName("net.tilialacus.TheProg");
    Method method = theClass.getDeclaredMethod("main", String[].class);
    String[] args = { "arg1", "arg2"};
    method.invoke(null, (Object)args);

当然,如果类不存在或者没有&#34; public static main(String [])&#34;那么你需要处理异常。方法。