JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();出现空指针异常的问题

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();可以获得环境下边的编译器的引用,但为什么我们在debug到这一语句的时候,查看到此函数返回的是一个null值,即没有编译器。。。。

我们知道,jre是java runtime environment,我们在运行java程序的时候其实就是调用jre里面的java.exe或者javaw.exe,后者不会有dos框跳出(这是在后台执行java程序的命令)。

我们安装jdk1.6的时候,会在安装包java下发现jdk1.6.0_07和jre1.6.0_07两个文件夹,在jdk1.6.0_07下有一个jre包,包里的内容和jre1.6.0_07文件夹下的内容是一样的。这是因为我们在开发程序的时候需要用到jre,所以jdk1.6.0_07下有一个jre包,但只运行java程序的时候,只会用到jre1.6.0_07下的命令。

弄清楚这一点,问题就好说了,我们要获得编译器,可是jre1.6.0_07文件夹下根本没有编译器,所有我们应该使用jdk1.6.0_07文件夹下的jre,如果我们用的IDE是MyEclipse的话,在windows=》pereference=》java=>installl jre里面,添加我们需要的jre,并勾选它。这样在MyEclipse中出现的空指针异常就解决了哦。。。。。

为什么我们用命令行执行相同的程序不会出现那个空指针异常呢,那是因为我们在寻找jre的时候是在优先考虑jdk下的jre的,但eclipse下是指定了jre的,所有我们在命令行下不会出错。。

如果你把程序打包成可以双击的jar文件,问题可能又来了,双击jar文件,其实是调用了jre的java -jar命令的,这个jre不是我们想要用的jre,修改如下:

在IE中的文件夹选项中,选择"文件类型"
找到jar类型的文件
点击"高级"

open

编辑

可以看到"C:/Program Files/Java/jdk1.6.0_07/bin/javaw.exe" -jar "%1" %*

这是我已经改好的路径,路径错的就按这个改过来吧。。。。

你可能感兴趣的:(java,jdk,动态编译,JavaCompiler)