Frage

MyClass.java:

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

für SimpleCompileTest.java Eintrag, die kompiliert die MyClass.java Datei.

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");
        }
    }
}

Ich bin die Ausführung der SimpleCompileTest Klasse und eine Nullpointer bekommen. Die ToolProvider.getSystemJavaCompiler () zurückkehrt null. Kann mir jemand sagen, was mit dem Code

falsch ist
War es hilfreich?

Lösung

Ich vermute, Sie laufen in dieses Problem - der Lauf Code mit einem JRE anstelle eines JDK.

Wenn Sie SimpleCompileTest laufen, versuchen Sie explizit Angabe der Version von java.exe Sie verwenden wie das in Ihrer JDK-Verzeichnis.

Andere Tipps

Ich habe den gleichen Fehler. Vielleicht bin ich zu spät, diese Frage zu beantworten, aber ich meine eigenen Erfahrungen zu teilen, könnte es jemand anderes hilft das gleiche Problem in der Zukunft. Ich war mit dem Quellcode Herumspielen an Compile Java Dateien zur Laufzeit .

Ich war immer java.lang.NullPointerException, wie es genannt wird. Ich ausgedruckt das Java Home-Verzeichnis mit System.out.println(System.getProperty("java.home")); und bemerkte meine Eclipse-deutet auf „C:\Program Files\Java\jre7“, auch nachdem ich meine Vorlieben geändert JDK1.7 statt JRE1.7 zu verwenden.

fand ich eine Abhilfe durch die Verwendung von JDK1.7 zwingen, indem Systemeigenschaft wie folgt aus:

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

Dann kompiliert ich mein Programm und bekommen keinen NullPointerException.

Wahrscheinlich haben Sie eine JRE anstelle von JDK installiert. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844

Ich hatte das gleiche Problem mit

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

zurückkehren null. Auch nach der Verwendung von

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

zurückkehrt null.

Allerdings war das Problem einfach, wie dieser Code ist in der Tools.jar in Java\jdk1.8.0_31\lib gefunden, wenn Sie JDK verwenden. was ich tat, war zu project-->properties-->Java Build Path-->order and export--> und verschobene tool.jar an die Spitze der anderen JRE und Projekte zu gehen. Das half mir erhalten diese Hilfe von null Hoffnung befreien Sie als well.Happy kompilieren ...: -)

Die Arbeit mit Java-Anwendung von expicitily die tools.jar einschließlich, aber für Web-Anwendung funktioniert nicht. Werfen Nullpointer

ERGÄNZUNG: Die Antwort oben ist die java.home Systemeigenschaft innerhalb des Programms einzustellen. Auch das funktioniert für mich, aber es ist nicht eine sehr allgemeine Lösung, da Sie hartcodiert für eine JDK-Version haben. Die Alternative, dass ich mit jetzt dem vollständigen Pfad zu „java“ auf der Kommandozeile zu geben, wenn ich das Programm auszuführen. Wie (im Einklang mit obigen Beispielen):

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

Geben Sie den vollständigen Pfad zu der JDK-Version bedeutet, dass die Version ist, die das Programm läuft, so das ist derjenige, der mit ToolProvider.getSystemJavaCompiler geholt werden ();

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top