2010-03-30 7 views
10

MyClass.java:Excepción de puntero nulo durante el uso del compilador de Java API

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 nulo. ¿Puede alguien decirme qué está mal con el código

+0

¿Puedes editar el código con las etiquetas? – bdhar

+2

Entonces, ¿su problema es que 'ToolProvider.getSystemJavaCompiler()' devuelve nulo? – Gabe

Respuesta

16

Sospecho que se está ejecutando en this problem - ejecutando el código con un JRE en lugar de un JDK.

Cuando ejecuta SimpleCompileTest, intente explícitamente especificando la versión de java.exe que está utilizando como la que está en su directorio JDK.

+1

¿Cómo se especifica explícitamente la versión de Java.exe que está utilizando como la de su JDK? Intenté 'ejecutar como' pero ya' Project JRE' seleccionado como JRE – CodyBugstein

+1

@Imray: no estoy seguro de lo que estás preguntando, si ese es el JRE seleccionado, eso es lo que se ejecutará. Si quieres uno diferente, selecciona un JRE diferente. Parece que tienes que hacer una nueva pregunta con tu * problema * exacto. –

+1

En su respuesta, usted dice: "Cuando ejecuta SimpleCompileTest, intente especificar explícitamente la versión de java.exe que está utilizando como la que está en su directorio JDK". Te pregunto, ¿cómo haces eso? – CodyBugstein

0

Está trabajando con la aplicación Java incluyendo explícitamente el archivo tools.jar pero no funciona la aplicación web. Lanzando Nullpointer

15

Tengo el mismo error. Tal vez sea demasiado tarde para responder a esta pregunta, pero comparto mis propias experiencias, podría ayudar a alguien más a enfrentar el mismo problema en el futuro. Estaba jugando con el código fuente en Compile Java Files At Runtime.

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 noté que mi Eclipse apuntaba a "C:\Program Files\Java\jre7" incluso después de cambiar mis preferencias para usar JDK1.7 en lugar de 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 recibió ninguna NullPointerException.

+0

Eres muy querido. has resuelto mi problema de las últimas 3 semanas. gracias –

+0

Intenté esto para que funcione [compilation-toolkit] (https://code.google.com/p/compilation-toolbox/). Tuve que usar 'System.setProperty (" java.home "," C: \\ Archivos de programa \\ Java \\ jdk1.7.0_02 \ jre ");' para que funcione. –

+0

¡Esto también funcionó para mí! Gracias Rashid! – CodyBugstein

0

SUPLEMENTO: La respuesta anterior es establecer la propiedad del sistema java.home dentro del programa. Eso también funciona para mí, pero no es una solución muy general, ya que ha codificado para una versión jdk. La alternativa que estoy usando ahora es dar la ruta completa a "java" en la línea de comando cuando ejecuto 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 la versión JDK significa que es la versión que se está ejecutando el programa, de modo que es el que se fue a buscar con ToolProvider.getSystemJavaCompiler();

1

que estaba teniendo el mismo problema

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

regresaba nulo. Incluso después de usar

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

devolvió nulo.

Sin embargo, el problema era simple ya que este código está en el Tools.jar que se encuentra en Java\jdk1.8.0_31\lib si está utilizando JDK. lo que hice fue ir al project-->properties-->Java Build Path-->order and export--> y moví tool.jar a la cima de otros JRE y proyectos. Esto me ayudó a deshacerme de la nula esperanza de que esto también te sirva de ayuda. Compilación feliz ... :-)

Cuestiones relacionadas