Vra

MyClass.java:

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

Ekstra aanbieding vir SimpleCompileTest.java dat die MyClass.java lêer stel.

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

Ek uitvoering van die SimpleCompileTest klas en kry 'n NullPointerException. Die ToolProvider.getSystemJavaCompiler () terugkeer null. Kan iemand my vertel wat verkeerd is met die kode

Was dit nuttig?

Oplossing

Ek vermoed jy hardloop is in hierdie probleem - loop die kode met 'n JRE in plaas van 'n JDK.

As jy SimpleCompileTest hardloop, probeer uitdruklik spesifiseer die weergawe van java.exe wat jy gebruik as die een in jou JDK gids.

Ander wenke

Ek het dieselfde fout. Miskien is ek te laat om hierdie vraag te beantwoord, maar ek deel my eie ervarings, kan dit help om iemand anders met dieselfde probleem in die toekoms. Ek speel rond met die bronkode by Stel Java lêers tydens looptyd .

Ek was besig om java.lang.NullPointerException soos dit genoem. Ek uitgedruk die Java tuisgids met System.out.println(System.getProperty("java.home"));, en opgemerk my Eclipse is verwys na "C:\Program Files\Java\jre7", selfs nadat ek my voorkeure verander na JDK1.7 in plaas van JRE1.7 gebruik.

Ek het 'n tydelike oplossing deur te dwing die gebruik van JDK1.7 deur die oprigting stelsel eiendom soos volg:

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

Toe saamgestel ek my program en het geen NullPointerException nie.

Waarskynlik het jy 'n JRE in plaas van JDK geïnstalleer. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844

Ek is met dieselfde probleem

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

was op pad terug van nul. Selfs na die gebruik van

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

was op pad terug van nul.

Maar die probleem was eenvoudig soos hierdie kode is in die Tools.jar gevind in Java\jdk1.8.0_31\lib as jy 'JDK. wat ek gedoen het, was om te gaan na project-->properties-->Java Build Path-->order and export--> en verhuis tool.jar om die top van ander JRE en projekte. Dit het my gehelp om ontslae te raak van nul hoop dit help jou as well.Happy opstel van ...: -)

Die werk met Java aansoek deur expicitily insluitend die tools.jar maar vir web aansoek nie werk nie. Gooi Nullpointer

AANVULLING: Die bogenoemde antwoord is om die eiendom java.home stelsel binne die program te stel. Wat werk vir my ook, maar dit is nie 'n baie algemene oplossing, aangesien jy hard-gekodeerde vir een JDK weergawe het. Die alternatief wat ek nou met behulp van is om die volle pad te gee aan "java" op die command line toe ek die program uit te voer. Soos (in ooreenstemming met voorbeelde hierbo):

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

Gee die volledige pad na die JDK weergawe middel dis die weergawe wat hardloop die program, so dit is die een wat gaan haal met ToolProvider.getSystemJavaCompiler () sal wees;

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top