我正在构建一个Swing应用程序,将使用Java WebStart进行分发。这是一种Java编辑器,我的应用程序用户将能够编译Java源代码。
问题是 -
它在开发环境中运行良好。但是当我使用Webstart部署我的应用程序时,在客户端上它返回null值。这是因为我的应用程序正在JRE而不是JDK上运行 [System.getProperty("java.home")指向JRE]。
为了解决这个问题,我遵循了以下SO线程中提到的建议。
链接:Null Pointer Exception while using Java Compiler API 我将java.home属性指向JDK的安装目录。
现在
问题是 -
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
它在开发环境中运行良好。但是当我使用Webstart部署我的应用程序时,在客户端上它返回null值。这是因为我的应用程序正在JRE而不是JDK上运行 [System.getProperty("java.home")指向JRE]。
为了解决这个问题,我遵循了以下SO线程中提到的建议。
链接:Null Pointer Exception while using Java Compiler API 我将java.home属性指向JDK的安装目录。
System.setProperty("java.home","C:\\DevEnv\\java");
现在
ToolProvider.getSystemJavaCompiler();
返回有效的编译器对象,但是当我使用它来编译Java代码时,出现了以下异常。实际上是在调用编译器对象的getStandardFileManager方法时出现的。
代码
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
System.out.println("Compiler - " + compiler);
if(compiler!=null){
MyDiagnosticListener c = new MyDiagnosticListener(logWindow);
StandardJavaFileManager fileManager = compiler.getStandardFileManager(c, Locale.ENGLISH, null);
Iterable<String> options = Arrays.asList("-d", CLASS_OUTPUT_DIR);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
c, options, null, files);
Boolean result = task.call();
}
异常 -
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://<dynamic-ip>:8080/" href="ProjT.jnlp">
<information>
<title>Tectra</title>
<vendor>Manas Kumar Mukherjee</vendor>
<homepage href="http://<dynamic-ip>:8080/" />
<description>Testing Testing</description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" />
<jar href="Tools.jar" />
...
<jar href="log4j-1.2.16.jar" />
</resources>
<application-desc main-class="com.ui.DevMain" />
</jnlp>
谢谢