Null Pointer Exception durante l'utilizzo di Java Compiler API
-
23-09-2019 - |
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
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 ();