Исключение Null Pointer при использовании Java Compiler API

MyClass.java:

package test; public class MyClass { public void myMethod(){ System.out.println("My Method Called"); } } 

Список для SimpleCompileTest.java, который компилирует файл MyClass.java.

SimpleCompileTest.java:

 package test; import javax.tools.*; public class SimpleCompileTest { public static void main(String[] args) { String fileToCompile = "test" + java.io.File.separator +"MyClass.java"; JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int compilationResult = compiler.run(null, null, null, fileToCompile); if(compilationResult == 0){ System.out.println("Compilation is successful"); }else{ System.out.println("Compilation Failed"); } } } 

Я выполняю class SimpleCompileTest и получаю исключение NullPointerException. Инструмент ToolProvider.getSystemJavaCompiler () возвращает значение null. Может кто-нибудь сказать мне, что не так с кодом

Я подозреваю, что вы столкнулись с этой проблемой – запуск кода с JRE вместо JDK.

Когда вы запускаете SimpleCompileTest , попробуйте явно указать версию java.exe, которую вы используете, как SimpleCompileTest в вашем каталоге JDK.

У меня такая же ошибка. Может быть, я слишком поздно, чтобы ответить на этот вопрос, но я разделяю свой собственный опыт, это может помочь кому-то еще столкнуться с той же проблемой в будущем. Я играл с исходным кодом в файлах компиляции Java в Runtime .

Я получал java.lang.NullPointerException как упоминалось. Я распечатал домашний каталог Java с помощью System.out.println(System.getProperty("java.home")); , и заметил, что мой Eclipse указывал на « C:\Program Files\Java\jre7 » даже после того, как я изменил свои предпочтения, чтобы использовать JDK1.7 вместо JRE1.7.

Я нашел обходное решение, заставив использовать JDK1.7, установив системное свойство следующим образом:

 System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02"); 

Затем я скомпилировал свою программу и не получил никакого NullPointerException .

Вероятно, у вас есть JRE вместо JDK. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477844

У меня была такая же проблема

 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

возвращал null. Даже после использования

 System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_31"); 

возвращал null.

Однако проблема была простой, поскольку этот код находится в Tools.jar найденном в Java\jdk1.8.0_31\lib если вы используете JDK. то, что я сделал, – это перейти к project-->properties-->Java Build Path-->order and export--> и переместить tool.jar в начало других JRE и проектов. Это помогло мне избавиться от нулевой надежды, и эта помощь вам тоже понравится. Привет, компиляция … 🙂

Он работает с Java-приложением, в том числе tools.jar, но для веб-приложения не работает. Бросок нулевого указателя

ДОПОЛНЕНИЕ: Ответ выше – установить в системе свойство java.home. Это тоже работает для меня, но это не очень общее решение, так как вы жестко закодированы для одной версии jdk. Альтернативой, которую я сейчас использую, является предоставление полного пути к «java» в командной строке при запуске программы. Например (в соответствии с приведенными выше примерами):

 C:\\Program Files\Java\jdk1.7.0_02\jre\bin\java -cp ..\classes path.to.program.myProgram 

Предоставление полного пути к версии jdk означает, что это версия, на которой запущена программа, и это тот, который будет получен с помощью ToolProvider.getSystemJavaCompiler ();

  • Мое текущее местоположение всегда возвращает null. Как я могу это исправить?
  • Android - NullPointerException в SearchView в панели действий
  • Исключает ли Null Pointer исключение кода?
  • Почему сравнение Integer с int может вызывать NullPointerException в Java?
  • вызов четкой и карты вместе бросает NPE в искровую библиотеку
  • Eclipse / Android: «Ошибки, выполняемые застройщиком Android Pre Compiler» по проекту ... »
  • java.lang.RuntimeException: Ошибка предоставления результата ResultInfo {who = null, request = 1888, result = 0, data = null} для активности
  • Можно ли запрограммировать NullPointerException?
  • Почему статические поля не инициализируются во времени?
  • Почему String.valueOf (null) вызывает исключение NullPointerException?
  • Почему нулевая ссылка печатается как "null"
  • Давайте будем гением компьютера.