2

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

Вот код:

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.

Wheres the error?

ответ

2

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

+0

не может иметь доступ к исходному банкомату, но я думаю, что я его запускаю с помощью JRE 1.7 – ctekk

2

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

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

Смежные вопросы