Applet Java控制台中的stdout

时间:2012-08-14 08:41:03

标签: java windows applet console stdout

我签名的Java小程序加载本机DLL。 DLL将跟踪打印到stdout。当我在Eclipse下运行applet时,我在Eclipse控制台中看到了这些跟踪。但是当我在Web浏览器中将其作为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

1 个答案:

答案 0 :(得分:3)

stdout的DLL通常会转到浏览器的stdout,至少根据我的经验。因此,如果您只想查看这些消息,那么我建议您从命令行启动浏览器(至少在Linux上),并查看在那里打印的内容。不确定如何在Windows上完成此操作。

重定向DLL的stdout会遇到麻烦:来自多个页面的多个applet可以由同一个插件进程执行,而CI / O流是每个进程,将它们重定向到一个applet会将它们重定向到所有人。它可能可以完成(在本机端使用管道和dup2),但是如果applet在非常受控的环境中执行,您应该只遵循该路由,在那里您可以排除与其他applet的不良交互。

当然,正确的解决方案是将DLL不打印到stdout,而是使用一些回调代替。如果您可以访问DLL的源代码,那就是我更喜欢的解决方案。如果没有,也许你可以与DLL的作者交谈。在某些平台上(我知道Linux),您可以通过使用插入器库拦截和修改某些库调用来获得类似的效果,但这不是可移植的。另一方面,本机DLL也不太可移植,所以这可能对你有用。