Exception de pointeur nul en utilisant l'API Java compilateur
-
23-09-2019 - |
Question
MyClass.java:
package test;
public class MyClass {
public void myMethod(){
System.out.println("My Method Called");
}
}
Liste des SimpleCompileTest.java qui compile le fichier 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");
}
}
}
J'exécute la classe SimpleCompileTest et obtenir un NullPointerException. Le ToolProvider.getSystemJavaCompiler () retourne null. Quelqu'un peut-il me dire ce qui ne va pas avec le code
La solution
Je suppose que vous êtes en cours d'exécution dans ce problème - l'exécution du code avec un JRE au lieu d'un JDK.
Lorsque vous exécutez SimpleCompileTest
, essayez explicitement en spécifiant la version de java.exe que vous utilisez comme celui dans votre répertoire JDK.
Autres conseils
Je suis la même erreur. Peut-être que je suis trop tard pour répondre à cette question, mais je partage mes propres expériences, il pourrait aider quelqu'un d'autre face à la même question à l'avenir. Je jouais avec le code source Compile fichiers Java Runtime A.
Je recevais java.lang.NullPointerException
comme il est mentionné. J'ai imprimé le répertoire Java avec System.out.println(System.getProperty("java.home"));
, et remarqué que mon Eclipse pointait à « C:\Program Files\Java\jre7
», même après avoir changé mes préférences à utiliser JDK1.7 au lieu de JRE1.7.
J'ai trouvé une solution de contournement en forçant l'utilisation de JDK1.7 en définissant la propriété du système comme celui-ci:
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
Alors je compilé mon programme et n'a pas obtenu une NullPointerException
.
Vous avez probablement un JRE au lieu de JDK installé. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844
Je faisais le même problème
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
retournait nulle. Même après avoir utilisé
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.8.0_31");
est de retour nulle.
Cependant, la question était simple que ce code est dans le Tools.jar
trouve dans Java\jdk1.8.0_31\lib
si vous utilisez JDK. ce que je faisais était d'aller à project-->properties-->Java Build Path-->order and export-->
et déplacé tool.jar
au-dessus d'autres projets et JRE.
Cela m'a aidé à me débarrasser d'espoir nulle cela vous aide comme well.Happy compilation ...: -)
Son travail avec application Java par expicitily y compris le tools.jar mais pour une application Web ne fonctionne pas. Lancer Nullpointer
SUPPLEMENT: La réponse ci-dessus est de définir la propriété du système java.home au sein du programme. Cela fonctionne pour moi aussi, mais ce n'est pas une solution très générale, puisque vous avez figée dans le code pour une version jdk. L'alternative que j'utilise est maintenant de donner le chemin complet « java » sur la ligne de commande lorsque je lance le programme. Tels que (compatible avec les exemples ci-dessus):
C:\\Program Files\Java\jdk1.7.0_02\jre\bin\java -cp ..\classes path.to.program.myProgram
Donner le chemin complet vers la version jdk signifie que est la version qui est en cours d'exécution du programme, de sorte que est celui qui sera récupéré avec ToolProvider.getSystemJavaCompiler ();