首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaCompiler,StandardJavaFileManager抛出NPE

JavaCompiler,StandardJavaFileManager抛出NPE
EN

Stack Overflow用户
提问于 2012-03-08 22:46:37
回答 2查看 1.1K关注 0票数 2

我想从另一个类编译一个类,但是我使用的每个方法都抛出一个NullPointerException。

代码如下:

代码语言:javascript
复制
File fRun = new File(fileToRun);    
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
// NPE IN NEXT LINE
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
Iterable<? extends JavaFileObject> compUnits = fileManager.getJavaFileObjects(fRun);
compiler.getTask(null, fileManager, null, null, null, compUnits).call();            
fileManager.close();

代码语言:javascript
复制
public static void main(String[] args) {
    String fileToCompile = "test" + java.io.File.separator + "MyClass.java";
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    // NPE IN NEXT LINE
    int compilationResult = compiler.run(null, null, null, fileToCompile);
    if (compilationResult == 0) {
        System.out.println("Compilation is successful");
    } else {
        System.out.println("Compilation Failed");
    }
}

来自http://www.javabeat.net/articles/73-the-java-60-compiler-api-1.html

我从Eclipse启动程序。

错误在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-08 22:51:07

getSystemJavaCompiler()最有可能返回null,因为在您运行这段代码的平台上没有提供Java编译器。你是用JDK还是用JRE运行你的程序?

票数 2
EN

Stack Overflow用户

发布于 2012-03-08 22:54:12

在本例中,看起来compiler变量是null。文档指出,如果您在没有可用的编译器的环境中调用它,例如只使用JVM,而不是JDK安装:http://docs.oracle.com/javase/6/docs/api/javax/tools/ToolProvider.html#getSystemJavaCompiler()

确保使用具有可用的编译器的完整JDK运行该程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9619448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档