java中是否可以以编程方式运行java程序?
例如,是否已加载可运行的类并作为线程运行?
修改
我知道我应该更精确:)
我有一个我想阅读并运行的.class文件。
idé是我不知道它是什么类型的程序,只是它是一个有效的类文件。 我想要做的是能够运行.class文件,就像我自己编写和编译它一样。
答案 0 :(得分:6)
这样的事,也许?
new Thread(new Runnable() {
@Override
public void run() {
MyRunnableClass.main(new String[]{});
}
}).start();
runnable class 是一个带有静态main方法的普通类。我们可以像任何其他方法一样调用该方法。如果我们在一个Thread中执行此操作,那么我们将会有一些类似于启动应用程序时JVM将要执行的操作。
带反射的完整版:
public static void start(final String classname, final String...params) throws Exception { // to keep it simple
final Class<?> clazz = Class.forName(classname);
final Method main = clazz.getMethod("main", String[].class);
new Thread(new Runnable() {
@Override
public void run() {
try {
main.invoke(null, new Object[]{params});
} catch(Exception e) {
throw new AssertionError(e);
}
}
}).start();
}
像
一样使用它start("com.example.myApp", "param1", "param2");
它将在新的Thread中执行该类的main方法。
答案 1 :(得分:3)
是的,如果要在流程中执行代码,可以通过反射来完成。
我没有测试过这段代码,但看起来应该是这样的:
Class<? extends Runnable> theClass =
Class.forName(fullyQualifiedClassName).asSubclass(Runnable.class);
Runnable instance = theClass.newInstance();
new Thread(instance).start();
答案 2 :(得分:0)
我发现了一篇有关如何做到这一点的有趣文章。请参阅here。