以编程方式运行Java程序
在java中是否可以以编程方式运行java程序 例如,加载一个可运行类并作为线程运行 编辑 我知道我应该更准确:) 我有一个.class文件要读取并运行 idé是我没有ide它是什么样的程序,只是它是一个有效的类文件。以编程方式运行Java程序,java,Java,在java中是否可以以编程方式运行java程序 例如,加载一个可运行类并作为线程运行 编辑 我知道我应该更准确:) 我有一个.class文件要读取并运行 idé是我没有ide它是什么样的程序,只是它是一个有效的类文件。 我想做的是能够像我自己编写和编译的那样运行.class文件。是的,如果您想在流程中执行代码,可以通过反射来执行 我尚未测试此代码,但它应该是这样的: Class<? extends Runnable> theClass = Class.forName(ful
我想做的是能够像我自己编写和编译的那样运行.class文件。是的,如果您想在流程中执行代码,可以通过反射来执行 我尚未测试此代码,但它应该是这样的:
Class<? extends Runnable> theClass =
Class.forName(fullyQualifiedClassName).asSubclass(Runnable.class);
Runnable instance = theClass.newInstance();
new Thread(instance).start();
Class我找到了一个关于如何做到这一点的问答技巧。看。也许是这样的吧
new Thread(new Runnable() {
@Override
public void run() {
MyRunnableClass.main(new String[]{});
}
}).start();
可运行类是具有静态main方法的普通类。我们可以像调用任何其他方法一样调用该方法。如果我们在一个线程中这样做,那么我们将有类似于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();
}
它将在一个新线程中执行该类的主方法。请尝试更具体一些。你到底想被处决什么?当然有可能,但你能更精确一点吗?你的意思是说你有一个编译过的jar文件,你想从Java程序运行还是什么?尝试澄清一点,如果可能的话,用一个例子。我不知道他所说的“加载runnable类”是什么意思,但我认为这表示反射。这正是我想要的!谢谢不完全是我想要的,但仍然很有趣
start("com.example.myApp", "param1", "param2");