使用JavaCompiler时出现Nullpointerexception错误

使用JavaCompiler时出现Nullpointerexception错误,java,nullpointerexception,Java,Nullpointerexception,以下是用EclipseIDE编写的Java代码 package compile; import java.io.IOException; import java.util.Arrays; import javax.tools.DiagnosticCollector; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; imp

以下是用EclipseIDE编写的Java代码

package compile;

import java.io.IOException;
import java.util.Arrays;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;

public class Execute {
    public static void main(String args[]) throws IOException, ClassNotFoundException {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
        StandardJavaFileManager fileManager = compiler.getStandardFileManager(
                diagnostics, null, null);
        Iterable<? extends JavaFileObject> compilationUnits = fileManager
                .getJavaFileObjectsFromStrings(Arrays
                        .asList("F:\\practice java\\project\\KeepingMoreKidsQuiet.java"));
        JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
                diagnostics, null, null, compilationUnits);
        boolean success = task.call();

        System.out.println(success);
        if(!success)
            System.out.println(diagnostics.getDiagnostics());
        fileManager.close();
    }
}
我得到的错误是:

线程主java.lang.NullPointerException中出现异常 在compile.Execute.mainExecute.java:17


您能告诉我如何解决此错误吗?

您的编译器引用在这一行JavaCompiler=ToolProvider.getSystemJavaCompiler可能为空


尝试在路径开始处设置%JAVA\u HOME%\bin

这一行的编译器引用可能为空JavaCompiler=ToolProvider.getSystemJavaCompiler

尝试在路径开始处设置%JAVA\u HOME%\bin,从:

返回: 此平台提供的编译器,如果未提供编译器,则为null

发件人:

返回: 此平台提供的编译器,如果未提供编译器,则为null


您的编译器为null,这也和设计ocd注释一样:不要在主方法中完成所有工作。利用方法和类

你的编译器是空的,就像设计ocd注释一样:不要在你的主方法中做所有的工作。利用方法和类

您很可能是在用JRE而不是JDK运行程序。只有在使用JDK运行ToolProvider时,它才能提供编译器


您很可能正在使用JRE而不是JDK运行程序。只有在使用JDK运行ToolProvider时,它才能提供编译器


这通常发生在您使用JRE而不是JDK运行程序时

像Eclipse这样的IDE检测JRE路径并将其设置为Java程序的运行路径。如果您使用的是Eclipse,那么在构建路径中,使用JDK路径设置新VM默认使用JRE路径


若您直接从命令提示符运行,那个么请检查您的类路径。

这通常发生在您使用JRE而不是JDK运行程序时

像Eclipse这样的IDE检测JRE路径并将其设置为Java程序的运行路径。如果您使用的是Eclipse,那么在构建路径中,使用JDK路径设置新VM默认使用JRE路径


如果直接从命令提示符运行,请检查类路径。

编译器对象是否为空?对象不能为空。一个变量可以有一个空值。你可以把空值本身看作一个特殊的隐喻对象,可以被变量引用。甚至还有空类来表示它。你的编译器对象是空的吗?对象不能为空。一个变量可以有一个空值。你可以把空值本身看作一个特殊的隐喻对象,可以被变量引用。甚至还有空类来表示它。编译器是否为空?从ToolProvider.getSystemJavaCompiler的api文档中,此平台提供的编译器为空,如果未提供编译器,则为空。您是否使用调试器进行了调试?您可以看到哪个对象为空,并试图找出原因。我打赌是ToolProvider.getSystemJavaCompiler;返回null,但确保.compiler为null?从ToolProvider.getSystemJavaCompiler的api文档中,此平台提供的编译器为空,如果未提供编译器,则为空。您是否使用调试器进行了调试?您可以看到哪个对象为空,并试图找出原因。我打赌是ToolProvider.getSystemJavaCompiler;返回null,但请确保。我如何摆脱它?@SuUbha查看我如何摆脱它?@SuUbha查看感谢所有人..问题解决了…之所以发生,是因为Eclipse IDE指向jre…我使用以下代码将其更改为JDK:System.setPropertyjava.home,C:\\Program Files\\Java\\jdk1.7.0\U 02;在主函数中使用…感谢大家..问题解决了…这是因为Eclipse IDE指向jre…我使用以下代码将其更改为JDK:System.setPropertyjava.home,C:\\Program Files\\Java\\jdk1.7.0\U 02;在主函数中使用。。。
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);