java - Applet Java 控制台中的标准输出

标签 java windows applet console stdout

我签名的 Java 小程序加载 native DLL。 DLL 将跟踪信息打印到标准输出。当我在 Eclipse 下运行小程序时,我在 Eclipse 控制台中看到这些跟踪。但当我在网络浏览器中将其作为小程序运行时,我在 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

最佳答案

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

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

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

关于java - Applet Java 控制台中的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11948695/

相关文章:

c++ - 在 Windows C++ 应用程序中获取主线程的控制

windows - 在 Visual Studio 2008 中创建 Windows Mobile 6.5.3 项目

java - 如何等待文本字段中的输入?

java - Applet 需要更新 Java

java - 使用 byte[] 抑制 Android Unread Field 警告

java - ArrayIndexOutOfBoundsException 未被捕获和忽略

java - 底层对象和底层实现

java - 模式 20+99 的正则表达式验证

java - txt文件的读取输出有空格

java - 二维数组和 JApplet : button visibility and label change