作者:静风疾水 | 来源:互联网 | 2023-09-24 12:31
本人在学习java6新特性的时候,发现了一个由eclipse InstalledJREs配置引出的问题。代码如下importjavax.tools.DiagnosticCollec
本人在学习java6新特性的时候,发现了一个由 eclipse Installed JREs 配置引出的问题。代码如下
import javax.tools.DiagnosticCollector; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; public class CompilerTest { public static void main(String[] args) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector diagnostics = new DiagnosticCollector(); StandardJavaFileManager fm = compiler.getStandardFileManager(diagnostics, null, null); System.out.println(fm); } }
运行此代码出现下面异常
Exception in thread “main” java.lang.NullPointerException at COMPILER.CompilerTest.main(CompilerTest.java:15)
进一步调试发现complier的值为null,但是查API发现JavaCopiler对象却是是这样得到的,令人费解啊。
于是我把这个小程序发给我同事,在他的机器上运行良好,经过一段时间的研究,我发现了同事机器上Installed JREs
选项的JRE home为C:/Program Files/Java/jdk1.6.0_21/jre,而本机JRE home为C:/Program Files/Java/jre6。
只要将JRE home改为jdk下面的jre问题就解决了。
于是上路找寻答案,发现
Eclipse中的Installed JREs
Windows -> Preferences -> Java -> Installed JREs
Eclipse中可以添加JDK和JRE来DEBUG和RUN Applications , 但其中还是有点区别的
区别是: 使用JRE无法DEBUG JAVA API, 而选择JDK则可以
选择JRE DEBUG JAVA API时,Eclipse会报Unknown Source, 即使你已经可以查看JAVA API Source