3

Я создаю приложение swing, которое будет распространено с помощью Java-веб-страницы. Это своего рода редактор java, где пользователи моего приложения смогут скомпилировать исходный код Java.Проблема при компиляции java-кода с использованием API-интерфейса компилятора

Этот вопрос -

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

Он отлично работает в Dev окр. Но когда я развертываю свое приложение с помощью webstart, то на стороне клиента он возвращает 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(); 
} 

Исключение -

enter image description here

Пожалуйста, помогите мне решить эту проблему.

ADD 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> 

Благодаря

+0

Вы правильно подписали свой апплет? В противном случае на клиентской машине будут только очень ограниченные разрешения! –

+0

да я. Приложение swing работает правильно. В JNLP-файле я установил все «все разрешения» в атрибуте безопасности. Процесс компиляции работает отлично в моем dev env (используя eclipse). Спасибо –

+0

1) Обязательно проверьте JNLP с помощью [JaNeLA] (http://pscode.org/janela/). 2) * «Я указываю свойство java.home в каталог установки JDK». * Как это должно работать для ваших пользователей? Вы ожидаете, что сами измените свойства? 3) Пожалуйста, не публикуйте скриншоты текстовой информации. Скопируйте/вставьте ** текст **. Мало того, что другие байты для других загружаются/видны, но доступны для поиска. –

ответ

0

ошибка должна помочь точно описать, что это неправильно.

«AccessControlContext.checkPermission» сбой «AccessControlException: доступ запрещен».

Проверьте, с какого пользователя запускается процесс при запуске JVM для этого приложения. Убедитесь, что пользователь, запускающий JVM, является администратором суперпользователя со всеми правами на полное дерево каталогов и т. Д. И выясните, исправляет ли он это. Затем уменьшите права доступа до тех пор, пока он не сломается снова, и у вас будет правильный уровень разрешений.

+0

У меня есть полная привилегия администратора в моей системе. Он работает от затмения. Но когда я развертываю с помощью java-веб-запуска и получая доступ к тому же, используя браузер, то только я получаю эту проблему. Вы предлагаете мне использовать специальную политику (-Djava.security.policy) со всем разрешением? Я не знаю, как это упоминать в файле jnlp. Из моего приложения я изменяю свойство java.home, чтобы указать JDK. является ли причиной какой-либо проблемы? Спасибо в adv. –

+0

При запуске через веб-запуск Java он будет работать как другой пользователь для этого процесса (системный пользователь), который, вероятно, не имеет достаточных разрешений для доступа к ресурсу. Запустите с консоли как системный администратор (а не веб-старт), чтобы узнать, разрешится ли это. –

Смежные вопросы