Программно скомпилировать Java с JavaCompiler? - PullRequest
5 голосов
/ 05 октября 2011

Я получил этот Java-код из другого потока переполнения стека

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

Но я продолжаю получать исключение NullPointerEx вот так

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

Это компилируется , но этовыдает исключение во время выполнения.Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 05 октября 2011

Ваш код работает нормально для меня, когда я выполняю его с использованием JDK. Если я выполняю его с помощью JRE, я получаю исключение NullPointerException на compiler.run(...), как вы.

Поэтому я предполагаю, что вам нужно только переключить среду выполнения Java для выполнения вашего кода.

3 голосов
/ 06 октября 2011

Ну, вы не можете скомпилировать Java-программы, используя JRE.

Таким образом, вы должны иметь JDK на своем пути, чтобы компиляция была возможной.

В вашем случае даже без запуска вашей программы, если вы запускаете в командной строке:
javac вы получите

«javac» не распознается как внутренняя или внешняя команда

Вот почему вы получаете исключение нулевого указателя.

...