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

Était-ce utile?

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 ();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top