0

我签名的 Java 小程序加载了一个本地 DLL。DLL 将跟踪打印到标准输出。当我在 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

至少在我的经验中,DLL 通常转到浏览器的stdoutstdout因此,如果您只想查看这些消息,那么我建议您从命令行启动浏览器(至少在 Linux 上)并查看打印的内容。不知道这将如何在 Windows 上完成。

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

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

于 2012-08-14T10:33:08.910 回答