以编程方式运行Java程序

以编程方式运行Java程序,java,Java,在java中是否可以以编程方式运行java程序 例如,加载一个可运行类并作为线程运行 编辑 我知道我应该更准确:) 我有一个.class文件要读取并运行 idé是我没有ide它是什么样的程序,只是它是一个有效的类文件。 我想做的是能够像我自己编写和编译的那样运行.class文件。是的,如果您想在流程中执行代码,可以通过反射来执行 我尚未测试此代码,但它应该是这样的: Class<? extends Runnable> theClass = Class.forName(ful

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

例如,加载一个可运行类并作为线程运行

编辑

我知道我应该更准确:)

我有一个.class文件要读取并运行

idé是我没有ide它是什么样的程序,只是它是一个有效的类文件。
我想做的是能够像我自己编写和编译的那样运行.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");