//以下是Hello.java文件。
public class Hello{
public static void main(String... s){
System.out.println("hello world");
}
}我试图使用编译上面的类,如下所示:
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。当有字符串类型参数时,我无法理解它为什么要抛出异常?
下面是我在执行时得到的堆栈跟踪:
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。
发布于 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
https://stackoverflow.com/questions/48588885
复制相似问题