Domanda

MyClass.java:

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

Inserzione per SimpleCompileTest.java che compila il file 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");
        }
    }
}

sto eseguendo la classe SimpleCompileTest e ottenere un NullPointerException. Il ToolProvider.getSystemJavaCompiler () restituisce nullo. Qualcuno può dirmi che cosa è sbagliato con il codice

È stato utile?

Soluzione

Ho il sospetto che si sta eseguendo in questo problema - in esecuzione del codice con un JRE invece di un JDK.

Quando si esegue SimpleCompileTest, provare esplicitamente che specifica la versione di java.exe si sta utilizzando come quello nella directory JDK.

Altri suggerimenti

ho ottenuto lo stesso errore. Forse sono troppo tardi per rispondere a questa domanda, ma condivido le mie esperienze, potrebbe aiutare qualcun altro di fronte lo stesso problema in futuro. Stavo giocando intorno con il codice sorgente a Compile I file Java Runtime A .

mi stavo java.lang.NullPointerException come è menzionato. Ho stampato la home directory Java con System.out.println(System.getProperty("java.home"));, e ho notato il mio Eclipse stava indicando "C:\Program Files\Java\jre7" anche dopo che ho cambiato le mie preferenze per usare JDK1.7 invece di JRE1.7.

Ho trovato una soluzione forzando l'utilizzo di JDK1.7 impostando proprietà di sistema in questo modo:

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

Poi ho compilato il mio programma e non ho avuto alcun NullPointerException.

Probabilmente hai un JRE, invece di JDK installato. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844

ho avuto lo stesso problema

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

stava tornando nullo. Anche dopo aver usato

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

stava tornando a nulla.

Tuttavia il problema è stato semplice come questo codice è nel Tools.jar trovata in Java\jdk1.8.0_31\lib se si utilizza JDK. quello che ho fatto è stato quello di andare a project-->properties-->Java Build Path-->order and export--> e si trasferisce tool.jar alla cima di altri JRE e progetti. Questo mi ha aiutato a sbarazzarsi di speranza null questo aiuto voi come well.Happy compilazione ...: -)

Il suo funzionamento con l'applicazione Java includendo expicitily la tools.jar, ma per l'applicazione web non funziona. Lanciare Nullpointer

SUPPLEMENTO: La risposta di cui sopra è quello di impostare la proprietà di sistema java.home all'interno del programma. Che funziona anche per me, ma non è una soluzione molto generale, dal momento che hai hard-codificato per una versione JDK. L'alternativa che sto usando ora è quello di dare il percorso completo di "Java" nella riga di comando quando si esegue il programma. Come ad esempio (in linea con esempi di cui sopra):

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

Dare il percorso completo per la versione JDK significa che è la versione che è in esecuzione il programma, in modo che è quello che verrà recuperato con ToolProvider.getSystemJavaCompiler ();

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top