下面使用“ToolProvider.getSystemJavaCompiler()”获取空指针执行是我的代码

时间:2017-01-24 09:59:36

标签: java

这是我的代码我在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();

2 个答案:

答案 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 版本。 现在它已经修复!!!!