JavaCompiler, StandardJavaFileManager выдает NPE - PullRequest
2 голосов
/ 08 марта 2012

Я хочу скомпилировать класс из другого класса, но каждый используемый мной метод выдает исключение NullPointerException.

Вот код:

File fRun = new File(fileToRun);    
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
// NPE IN NEXT LINE
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
Iterable<? extends JavaFileObject> compUnits = fileManager.getJavaFileObjects(fRun);
compiler.getTask(null, fileManager, null, null, null, compUnits).call();            
fileManager.close();

или

public static void main(String[] args) {
    String fileToCompile = "test" + java.io.File.separator + "MyClass.java";
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    // NPE IN NEXT LINE
    int compilationResult = compiler.run(null, null, null, fileToCompile);
    if (compilationResult == 0) {
        System.out.println("Compilation is successful");
    } else {
        System.out.println("Compilation Failed");
    }
}

с http://www.javabeat.net/articles/73-the-java-60-compiler-api-1.html

Я запускаю программу из Eclipse.

Где ошибка?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Похоже, переменная compiler равна null в вашем случае.В документации говорится, что это может произойти, если вы вызываете его в среде, где у вас нет доступного компилятора, например, просто с помощью JVM, а не установки JDK: http://docs.oracle.com/javase/6/docs/api/javax/tools/ToolProvider.html#getSystemJavaCompiler()

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

2 голосов
/ 08 марта 2012

Скорее всего, getSystemJavaCompiler () возвращает значение null, поскольку на той платформе, на которой вы его запускаете, нет Java-компилятора.Вы запускаете свою программу с JDK или с JRE?

...