使用JavaCompiler时出现Nullpointerexception错误
以下是用EclipseIDE编写的Java代码使用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
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);