Programmatically compile java with JavaCompiler?

情到浓时终转凉″ 提交于 2020-01-03 15:16:09

问题


I got this Java code from another Stack Overflow thread

import java.io.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

public class Main {
  public static void main(String[] args) throws IOException{
    String source = " public class Test { public static void main(String args[]) {     System.out.println(\"hello\"); } }";

    // Save source in .java file.
    File root = new File("C:\\java\\");
    root.mkdir();
    File sourceFile = new File(root, "\\Test.java");
    Writer writer = new FileWriter(sourceFile);
    writer.write(source);
    writer.close();

    // Compile source file.
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, sourceFile.getPath());
  }
}

But I keep getting a NullPointerException like this

Exception in thread "main" java.lang.NullPointerException
    at com.zove.compiler.Main.main(Main.java:24)

It does compile but it throws the exception at runtime. What am I doing wrong?


回答1:


Your code works fine for me when I execute it using the JDK. If I execute it using the JRE I get a NullPointerException on compiler.run(...) like you.

Therefore I assume that you only have to switch the Java runtime for executing your code.




回答2:


Well you can't compile java programs using the JRE.

So you have to have the JDK in your path so that the compilation be possible.

In your case without even running your program if you run in command line:
javac you would get

'javac' is not recognized as an internal or external command

This is why you get the null pointer exception.



来源:https://stackoverflow.com/questions/7665809/programmatically-compile-java-with-javacompiler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!