3

Java webstart を使用して配布されるスイング アプリケーションを構築しています。これは、アプリのユーザーが Java ソース コードをコンパイルできる Java エディタのようなものです。

問題は -

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

開発環境では問題なく動作します。しかし、webstart を使用してアプリをデプロイすると、クライアント側で null が返されます。これは、アプリが JDK ではなく JRE で実行されているためです。[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>

ありがとう

4

1 に答える 1

0

エラーは、何が間違っているかを正確に説明するのに役立ちます。

「AccessControlContext.checkPermission」は「AccessControlException: アクセスが拒否されました」で失敗します。

このアプリケーションの JVM の開始時にプロセスが実行されているユーザーを確認してください。JVM を起動するユーザーが、完全なディレクトリ ツリーなどに対するすべての権限を持つスーパーユーザー管理者であることを確認し、それで問題が解決するかどうかを確認します。次に、再び壊れるまでアクセス権を縮小すると、適切なアクセス許可レベルが得られます。

于 2013-09-18T19:06:10.713 に答える