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

时间:2011-02-11 03:03:55

标签: 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();
}

3 个答案:

答案 0 :(得分:5)

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

>java someClass

来自您的应用程序。 This link可能有帮助。

如果你想实际加载类文件并在当前应用程序中使用它,我认为this或者动态加载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();
    }

}

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

MyClass newObj = new MyClass()

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

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

答案 1 :(得分:3)

URLClassLoader加载。

File root = new File("/java"); // The package root.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("test.Test", true, classLoader); // Assuming package test and class Test.
Object instance = cls.newInstance();
// ...

另见:

答案 2 :(得分:1)

你需要创建一个类加载器(URLClassLoader可能会好),它将加载刚刚编译的类文件。 (因此,对于URLClassLoader,编译输出路径应该是其中一个URL。

然后,使用类加载器加载编译的类,并使用反射执行它。

Class c = cl.loadClass("ClassName");

......等等。