我想在java项目中运行外部Java项目(类)。我不是指任何程序(例如EXE文件),而是java类(项目)。运行外部java类(项目)
让考虑你有类文件路径的字符串:
String = "C:\\test\\test.class";
我想在java项目中运行外部Java项目(类)。我不是指任何程序(例如EXE文件),而是java类(项目)。运行外部java类(项目)
让考虑你有类文件路径的字符串:
String = "C:\\test\\test.class";
“跑”另一个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);
当然,如果该类不存在或者没有“public static main(String [])”方法,则需要处理异常。
除了你的非常喜欢的语气,它好像你想要某种插件结构。
基本上,你需要一个ClassLoader
这将加载你想要的类/库。一旦他们被加载,你可以使用它们。
也许这可以帮助你:How to load a jar file at runtime
这是ClassLoader
的责任。
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());
}
}
你的例子似乎是更一般的情况。考虑最简单的例子,假设你有一个字符串String =“C:\\ .. \\ test.class”中的类文件路径。现在如何运行(加载)它。 – 100798
...你读过这个代码吗?实际上,第一行是您必须编写的唯一一个使其按照您想要的方式工作的行。有没有什么特别的东西会遇到麻烦?如果你只希望它加载一个特定的文件,那么你可以(如果你想要一个单行的改变)改变'FilenameFilter'只为你的“test.class”情况返回true。 –
是的,但它不起作用。文件名保留字符串中文件夹的所有类。即使有一个.class文件,它也不会执行任何操作。没有加载该类。防爆。我在该文件夹上有一个简单的GUI程序,但它不加载。更甚者,不会出现错误。 – 100798
Lindsjo让说我有一个项目例1和它的主类例1:如果你有,你想要实例/使用磁盘外部
.class
文件,那么一旦你知道了可用的API是相对简单的。类。 如何从我的java程序构建和运行这个? 你有什么想法吗? – 100798@ 100798该类是否已经在类路径中?所以你应该能够使用我上面展示的内容。如果没有,那么你必须通过类加载器加载它(参见craig的答案)。你有哪个部分有问题? –