首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口工具的run()方法在JDK 9中抛出NullPointerException

接口工具的run()方法在JDK 9中抛出NullPointerException
EN

Stack Overflow用户
提问于 2018-02-02 18:33:40
回答 1查看 288关注 0票数 2

//以下是Hello.java文件。

代码语言:javascript
复制
public class Hello{
    public static void main(String... s){
        System.out.println("hello world");
    }
}

我试图使用编译上面的类,如下所示:

代码语言:javascript
复制
import javax.tools.*;
public class CallingJavaCompiler{
    public static void main(String... s){
        JavaCompiler comp = ToolProvider.getSystemJavaCompiler();
        int i = comp.run(System.in,System.out,System.err,"Hello.java");
        System.out.println(i);
    }
}

在执行CallingJavaCompiler类时(使用JDK 9),它在run方法中抛出java.lang.NullPointerException。当有字符串类型参数时,我无法理解它为什么要抛出异常?

下面是我在执行时得到的堆栈跟踪:

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
    at CallingJavaCompiler.main(CallingJavaCompiler.java:5)

另一方面,在JDK 8中执行相同的程序(即JDK 8中的),它正在执行而没有任何运行时异常

请帮助我理解为什么当我使用JDK 9执行它时它会抛出Null指针异常(NPE)?

注意:--我正在使用javac9.0.4编译上面的代码,并使用JavaVersion9.0.4执行它。在使用这些版本编译和执行时,我得到的是NPE,而不是JDK 8。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-02 19:17:31

将Hello.java替换为Hello.java文件的完整路径(ex C:\Test\Hello.java)。无论如何,即使在通往NullPointerException的路径是错误的时候,我也没有得到Hello.java。

更新

我能够复制您的java.lang.NullPointerException错误。它出现在使用JRE而不是JDK运行程序时。这样,就找不到编译器了,因为编译器只能在JDK版本中使用。

UPDATE2

因此,您正在使用命令行来运行程序。

在使用%jdk_home%/bin/java执行时,您使用的是JDK,使用%jdk_home%/jre/bin/java执行时使用的是JRE。

我看到您使用JDK 9.0.1编译,并使用JRE 9.0.4运行。若要使其工作,请执行以下命令:

%JDK 9.0.1 home%/bin/java CallingJavaCompiler

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

https://stackoverflow.com/questions/48588885

复制
相关文章

相似问题

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