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

¿Fue útil?

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 ();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top