0

署名されたJavaアプレットは、ネイティブDLLをロードします。DLLはトレースをstdoutに出力します。Eclipseでアプレットを実行すると、Eclipseコンソールにこれらのトレースが表示されます。しかし、Webブラウザーでアプレットとして実行すると、Javaコンソールに表示されません。それは可能ですか?

<applet name="name" id="game" archive="my.jar" code="path/to/main.class" mayscript="" title="Java"> 
    <param name="separate_jvm" value="true"> 
    <param name="java_arguments" value="-Xmx384m -Dsun.java2d.noddraw=true -XX:CompileThreshold=1500 -Xincgc -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Dcom.sun.management.jmxremote -Xss6m"> 
    <div class="nojava"> 
        <h1> 
            Please Update Java</h1> 
    </div> 
</applet> 

Windows、できればFirefoxが重要な場合

4

1 に答える 1

3

少なくとも私の経験では、stdout通常、DLLのはブラウザの に移動します。stdoutしたがって、これらのメッセージを確認するだけなら、(少なくとも Linux では) コマンド ラインからブラウザーを起動し、そこに表示される内容を確認することをお勧めします。これが Windows でどのように行われるかはわかりません。

DLLのリダイレクトはstdout問題を引き起こします。複数のページから複数のアプレットを同じプラグイン プロセスで実行できます。また、CI/O ストリームはプロセスごとであるため、1 つのアプレットにリダイレクトすると、すべてのアプレットにリダイレクトされます。おそらく (パイプを使用dup2してネイティブ側で) 実行できますが、他のアプレットとの不適切な相互作用を除外できる、非常に制御された環境でアプレットが実行される場合にのみ、そのルートに従う必要があります。

もちろん、適切な解決策は、DLL を stdout に出力せず、代わりにコールバックを使用することです。DLL のソース コードにアクセスできる場合は、それが望ましい解決策です。そうでない場合は、おそらく DLL の作成者と話すことができます。一部のプラットフォーム (Linux については知っています) では、インターポーザー ライブラリを使用して特定のライブラリ呼び出しをインターセプトおよび変更することにより、同様の効果を得ることができる場合がありますが、それは移植性がありません。一方、ネイティブ DLL もあまり移植性がないため、これでうまくいくかもしれません。

于 2012-08-14T10:33:08.910 に答える