如何在Java程序中运行Java源代码

ger*_*rky 5 java compiler-construction

我编写了一些代码来编译Java源代码.然后它生成.class文件.问题是我该如何运行它?

例如,我对正在设置的程序和类的名称没问题,我使用了prog p = new prog(),但是,在这种情况下,类文件在编译之前还不存在.不太确定该怎么做.有人可以给我一个建议吗?

顺便说一句,这个类看起来像这样:

public void compile{
  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();  
  int compilationResult = compiler.run(null, null, null, fileToCompile);  
}

public void run(){
  Prog prog = new Prog();
  prog.run();
}
Run Code Online (Sandbox Code Playgroud)

Zac*_*h L 5

如果您只想运行它,可以使用Runtime.exec或ProcessBuilder启动Java进程 .这些将创建一个单独的java进程来运行您的java程序.这更有可能是你想要的.你基本上可以做的是:

>java someClass
Run Code Online (Sandbox Code Playgroud)

从您的申请中.此链接可能有所帮助.

如果你想实际加载类文件并在你当前的应用程序中使用它,我认为有点像这样,或动态加载Java类应该有所帮助.基本上(直接来自链接,稍加修改):

public class MainClass {

  public static void main(String[] args){

    ClassLoader classLoader = MainClass.class.getClassLoader();

    try {
        Class aClass = classLoader.loadClass("MyClass");
        System.out.println("aClass.getName() = " + aClass.getName());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

}
Run Code Online (Sandbox Code Playgroud)

加载类后,您有一个Class对象,您可以创建一个aClass由调用表示的类的实例,aClass.newInstance()就像这样

MyClass newObj = new MyClass()

或者您可以使用Class对象公开的任何其他方法.

正如davmac所指出的,上面的代码示例假定您正在加载的代码位于应用程序类路径中.如果要运行的类文件不在类路径中,则可能需要查看URLClassLoader