2012-08-14 61 views
0

我已簽名的Java小程序會加載本機DLL。 DLL將痕跡輸出到標準輸出。當我在Eclipse下運行applet時,我在Eclipse控制檯中看到這些跟蹤。但是當我在Web瀏覽器中將它作爲applet運行時,我沒有在Java控制檯中看到它們。它有可能嗎?Applet 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,如果它的事項

+0

儘管受信任的applet可以通過***默認***重定向System.out和System.err,但它們會轉到控制檯。 – 2012-08-14 08:53:12

+0

@AndrewThompson:'System.out/System.err'確實可以,這很好,我不想改變它。但從本地DLL'stdout'不,我不知道如何解決這個 – 2012-08-14 08:58:39

+0

感謝澄清。我認爲'stdout'會映射到'System.out'。 – 2012-08-14 10:11:55

回答

3

的DLL的stdout通常去到瀏覽器的stdout,在我的經驗,至少。因此,如果你只想看看這些消息,那麼我建議你從命令行(至少在Linux上)啓動你的瀏覽器,並看看在那裏打印什麼。不知道這將如何在Windows上完成。

將DLL重定向到stdout會引起麻煩:來自多個頁面的多個小程序可以由同一個插件進程執行,並且由於CI/O流是按進程執行的,將它們重定向到一個小程序會將其重定向到所有。它可能可以完成(在本機端使用管道和dup2),但是如果applet在非常受控制的環境中執行,那麼您應該只遵循該路線,您可以在其中排除與其他小程序的不良交互。

當然,正確的解決方案是讓DLL不打印到標準輸出,而是使用一些回調。如果您有權訪問DLL的源代碼,那就是我更喜歡的解決方案。如果沒有,也許你可以和DLL的作者交談。在某些平臺上(我瞭解Linux),通過使用內插庫來攔截和修改某些庫調用,您可能會獲得類似的效果,但這不過是可移植的。另一方面,原生DLL也不太便攜,所以這可能適用於你。

+0

在Windows上嘗試過Firefox控制檯(firefox.exe -console)。 DLL輸出沒有出現在那裏 – 2012-08-14 15:03:42

+0

stderr是當你不想覆蓋標準輸出,它總是默認爲終端... – Shark 2012-08-21 08:34:44

相關問題