这是我的代码我在JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
行获取nullpointer异常,根据stackoverflow上的给定示例我得到一些说法明确设置“java.home”然而我得到同样的问题。
File dir = new File("d://Hello.java");
File[] javaFiles = dir.new FilenameFilter() {
public boolean accept(File file, String name) {
return name.endsWith(".java");
}
});
String home= System.getProperty("java.home");
System.out.println(""+home.replace("\\jre",""));
System.setProperty("java.home", home);
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = javaCompiler.getStandardFileManager(diagnostics, Locale.US,Charset.forName("UTF-8"));
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(javaFiles));
javaCompiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits).call();
for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
System.out.format("Error on line %d in %d%n", diagnostic.getLineNumber(), diagnostic.getSource().toString());
}
fileManager.close();
答案 0 :(得分:0)
我想你可能会遇到this known problem。尝试使用JRE而不是JDK。
如果您已经在使用JRE,那么请尝试将tools.jar专门包含到您的库中。
正如Jon Skeet在此answer
中所述答案 1 :(得分:0)
最后我得到了这个问题,这是因为Tools.jar的版本不同 我在类路径中使用了不同的Tools.jar,因为我使用的是 JDK 1.7 ,但使用 Tools.jar 1.6 版本。 现在它已经修复!!!!