使用JDK6动态编译src,但在切换到JDK环境后,仍然从ToolProvider.getSystemJavaCompiler()获取空值;

使用JDK6动态编译src,但在切换到JDK环境后,仍然从ToolProvider.getSystemJavaCompiler()获取空值;,java,dynamic-compilation,Java,Dynamic Compilation,我使用JDK6从UI编译输入src并立即运行 但问题是,默认情况下,我的应用程序使用的是jre而不是jdk,因此: JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 始终返回null 我注意到每个服务器上都安装了JDK6,所以我写这篇文章是为了解决这个问题: System.setProperty("java.home", "\opt\jdk-i386-60"); JavaCompiler compiler = ToolP

我使用JDK6从UI编译输入src并立即运行

但问题是,默认情况下,我的应用程序使用的是jre而不是jdk,因此:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
始终返回null

我注意到每个服务器上都安装了JDK6,所以我写这篇文章是为了解决这个问题:

System.setProperty("java.home", "\opt\jdk-i386-60");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
// Dynamic compile and run app
但它不起作用,也许java环境不会立即改变到我刚刚设置的位置,它仍然得到空对象

所以,我的问题是,如何将jre环境切换到jdk,并使其立即生效,从而获得JavaCompiler对象


谢谢。

不要试图设置
java.home
!通过命令行开关设置它通常会导致很多问题(找不到库,…)。通过
setProperty()
设置它通常没有影响

相反,如果您想使用特定的Java安装来执行应用程序,只需使用其
Java
可执行文件来启动应用程序:

/opt/jdk-i386-60/bin/java -jar myApp.jar