Excepción de puntero nulo durante el uso de la API de Java Compiler
-
23-09-2019 - |
Pregunta
MyClass.java:
package test;
public class MyClass {
public void myMethod(){
System.out.println("My Method Called");
}
}
Listado de SimpleCompileTest.java que compila el archivo 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");
}
}
}
Estoy ejecutando la clase SimpleCompileTest y conseguir una NullPointerException. El ToolProvider.getSystemJavaCompiler () devuelve un valor nulo. ¿Puede alguien decirme lo que está mal con el código
Solución
sospecho que se está ejecutando en este problema - ejecutar el código con un JRE en lugar de un JDK.
Al ejecutar SimpleCompileTest
, intente explícitamente que especifica la versión de java.exe que utiliza como el que está en el directorio de JDK.
Otros consejos
Tengo el mismo error. Tal vez soy demasiado tarde para responder a esta pregunta, pero comparto mi propia experiencia, que podría ayudar a alguien más frente al mismo problema en el futuro. Yo estaba jugando con el código fuente en Compilar Los archivos de Java en tiempo de ejecución .
Me estaba poniendo java.lang.NullPointerException
como se menciona. Imprimí el directorio de inicio de Java con System.out.println(System.getProperty("java.home"));
, y se dio cuenta de mi Eclipse estaba apuntando a "C:\Program Files\Java\jre7
", incluso después de cambiar mis preferencias para usar en lugar de JDK1.7 JRE1.7.
He encontrado una solución al forzar el uso de JDK1.7 estableciendo la propiedad sistema como este:
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
Entonces compilado mi programa y no hay nada NullPointerException
.
Probablemente usted tiene un JRE instalado en lugar de JDK. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844
I estaba teniendo el mismo problema
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
volvía nula. Incluso después de usar
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_31");
volvía nula.
Sin embargo, la cuestión era simple como esto es el código de la Tools.jar
encuentra en Java\jdk1.8.0_31\lib
si está utilizando JDK. Lo que hice fue ir a project-->properties-->Java Build Path-->order and export-->
y tool.jar
se trasladó a la parte superior de otro JRE y proyectos.
Esto ayudó a deshacerme de esperanza nula ayuda esto como well.Happy compilar ...: -)
Su trabajo con aplicaciones Java mediante la inclusión de la expicitily tools.jar pero para aplicaciones web que no trabaja. Lanzar Nullpointer
SUPLEMENTO: La respuesta anterior es establecer la propiedad del sistema java.home dentro del programa. Que funciona para mí también, pero no es una solución muy general, desde que ha codificado por una versión de JDK. La alternativa que estoy usando ahora es dar la ruta completa "java" en la línea de comandos al ejecutar el programa. Tales como (consistente con ejemplos anteriores):
C:\\Program Files\Java\jdk1.7.0_02\jre\bin\java -cp ..\classes path.to.program.myProgram
Dar la ruta completa a los medios de versión de JDK Esa es la versión que se está ejecutando el programa, así que es el que va a ser exagerado con ToolProvider.getSystemJavaCompiler ();