11
votes

Null Pointer Exception lors de l'utilisation de l'API de Java Compiler

myClass.java: xxx pré>

listing pour SimpleCompileTest.java qui compile le fichier myClass.java. p>

SimpleCompileTest.java: p>

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


2 commentaires

Pouvez-vous s'il vous plaît éditez votre code avec des tags?


Votre problème est donc que ToolProvider.getsystemjavacompiler () retourne null?


6 Réponses :


16
votes

Je soupçonne que vous courez dans Ce problème - exécuter le code avec une jre au lieu d'un JDK.

Lorsque vous exécutez SimpleCompileTest , essayez explicitement spécifiant la version de java.exe que vous utilisez comme celle de votre répertoire JDK.


4 commentaires

Comment spécifiez-vous explicitement la version de Java.exe que vous utilisez comme celle de votre JDK? J'ai essayé exécuter comme mais c'est déjà projet JRE sélectionné comme jre


@Imray: Je ne sais pas ce que vous demandez - si c'est le JRE sélectionné, c'est ce qui fonctionnera. Si vous en voulez un autre, sélectionnez une autre JRE. On dirait que vous devez poser une nouvelle question avec votre problème exactement .


Dans votre réponse, vous dites: "Lorsque vous exécutez SimpleCompileTest, essayez de spécifier explicitement la version de Java.exe que vous utilisez comme celle de votre répertoire JDK." Je demande, comment faites-vous cela?


@Imray: Je dis que c'est probablement le "projet jre" que vous avez configuré n'est tout simplement pas le bon. Donc éditer cette configuration.



1
votes

Vous avez probablement un jre au lieu de JDK installé. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6477844


0 commentaires

0
votes

Son travail avec application Java en confidentiellement, y compris les outils.jar mais pour une application Web ne fonctionne pas. Jeter Nullpointer


0 commentaires

18
votes

J'ai la même erreur. Je suis peut-être trop tard pour répondre à cette question, mais je partage mes propres expériences, cela pourrait aider quelqu'un d'autre à faire face à la même question à l'avenir. Je jouais avec le code source chez Compiler Les fichiers Java à l'exécution .

J'avais java.lang.nullpointereException comme cela est mentionné. J'ai imprimé le répertoire de base Java avec system.out.println (system.geproperty ("java.home")); , et remarqué mon éclipse indiquant " C: \ Program Files \ Java \ jre7 "Même après avoir changé mes préférences pour 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 une propriété système comme celle-ci: xxx

puis j'ai compilé mon programme et n'a pas compris Tout nullpointException .


2 commentaires

Tu es super chérie. Vous avez résolu mon problème de 3 dernières semaines. Merci


J'ai essayé ceci pour faire Compilation-Toolkit travail. J'ai dû utiliser system.setproperty ("java.home", "c: \\ Program Files \\ java \\ jdk1.7.0_02 \ jre"); pour le faire fonctionner.



0
votes

Supplément: La réponse ci-dessus consiste à définir la propriété système Java.Home dans le programme. Cela fonctionne aussi pour moi, mais ce n'est pas une solution très générale, car vous avez un codé dur pour une version JDK. L'alternative que j'utilise maintenant est de donner le chemin complet de "Java" sur la ligne de commande lorsque je gère le programme. Telle que (cohérente avec des exemples ci-dessus): xxx

donnant le chemin complet de la version JDK signifie que la version qui exécute le programme, c'est donc celui qui sera récupéré avec ToolProvider.getsystemjavacpiler ( );


0 commentaires

1
votes

J'avais le même problème

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


0 commentaires