Я создаю приложение Swing, которое будет распространяться с использованием java webstart. Это своего рода редактор Java, в котором пользователи моего приложения смогут компилировать исходный код Java.
Проблема в том -
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
Он отлично работает в среде разработки. Но когда я развертываю свое приложение с помощью веб-старта, то на стороне клиента оно возвращает значение null. Это связано с тем, что мое приложение работает на JRE вместо JDK. [System.getProperty ("java.home") указывает на JRE]
Чтобы решить эту проблему, я последовал предложению, упомянутому в следующей ветке SO.
Я указываю свойство 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();
}
Исключение -
Пожалуйста, помогите мне решить эту проблему.
ДОБАВИТЬ JNLP
<?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>
Спасибо