以编程方式运行Java程序

时间:2011-05-19 08:19:01

标签: java

java中是否可以以编程方式运行java程序?

例如,是否已加载可运行的类并作为线程运行?

修改

我知道我应该更精确:)

我有一个我想阅读并运行的.class文件。

idé是我不知道它是什么类型的程序,只是它是一个有效的类文件。 我想要做的是能够运行.class文件,就像我自己编写和编译它一样。

3 个答案:

答案 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