我想从java项目中运行外部Java项目(类)。我不是指任何程序(例如EXE文件)而是java类(项目)。
让我们考虑一下字符串中的类文件路径:
String = "C:\\test\\test.class";
答案 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
来加载你想要的类/库。加载后,您可以使用它们。
答案 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;那么你需要处理异常。方法。