Applet Java控制台中的stdout
我的签名Java小程序加载本机DLL。DLL将跟踪打印到标准输出。在Eclipse下运行小程序时,我会在Eclipse控制台中看到这些跟踪。但当我在web浏览器中将Java控制台作为小程序运行时,在Java控制台中看不到它们。有可能吗Applet Java控制台中的stdout,java,windows,applet,console,stdout,Java,Windows,Applet,Console,Stdout,我的签名Java小程序加载本机DLL。DLL将跟踪打印到标准输出。在Eclipse下运行小程序时,我会在Eclipse控制台中看到这些跟踪。但当我在web浏览器中将Java控制台作为小程序运行时,在Java控制台中看不到它们。有可能吗 <applet name="name" id="game" archive="my.jar" code="path/to/main.class" mayscript="" title="Java"> <param name="separ
<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>
请更新Java
Windows,最好是Firefox,如果它很重要的话,DLL的
stdout
通常会转到浏览器的stdout
,至少在我的经验中是这样的。因此,如果您只想查看这些消息,那么我建议您从命令行(至少在Linux上)启动浏览器,并查看其中打印的内容。不确定在Windows上如何实现这一点
重定向DLL的stdout
会带来麻烦:来自多个页面的多个小程序可以由同一个插件进程执行,并且由于每个进程都有C I/O流,将它们重定向到一个小程序会将它们重定向到所有进程。这可能是可以做到的(在本机端使用管道和dup2
),但只有在小程序在非常受控的环境中执行时,才应该遵循这一路线,在这种环境中,您可以排除与其他小程序的不良交互
当然,正确的解决方案是让DLL不打印到标准输出,而是使用一些回调。如果您可以访问DLL的源代码,那就是我更喜欢的解决方案。如果没有,也许您可以与DLL的作者交谈。在某些平台上(我了解Linux),您可以通过使用插入器库拦截和修改某些库调用来获得类似的效果,但这不是可移植的。另一方面,本机DLL也不太可移植,因此这可能适合您。DLL的
stdout
通常会转到浏览器的stdout
,至少在我的经验中是这样。因此,如果您只想查看这些消息,那么我建议您从命令行(至少在Linux上)启动浏览器,并查看其中打印的内容。不确定在Windows上如何实现这一点
重定向DLL的stdout
会带来麻烦:来自多个页面的多个小程序可以由同一个插件进程执行,并且由于每个进程都有C I/O流,将它们重定向到一个小程序会将它们重定向到所有进程。这可能是可以做到的(在本机端使用管道和dup2
),但只有在小程序在非常受控的环境中执行时,才应该遵循这一路线,在这种环境中,您可以排除与其他小程序的不良交互
当然,正确的解决方案是让DLL不打印到标准输出,而是使用一些回调。如果您可以访问DLL的源代码,那就是我更喜欢的解决方案。如果没有,也许您可以与DLL的作者交谈。在某些平台上(我了解Linux),您可以通过使用插入器库拦截和修改某些库调用来获得类似的效果,但这不是可移植的。另一方面,本机DLL也不太可移植,因此这可能适合您。虽然受信任的小程序可以重定向
System.out
&System.err
,但默认情况下它们会转到控制台。@andrewhompson:System.out/System.err
确实可以,这很好,我不想更改它。但是本机DLL中的stdout没有,我不知道如何修复这个问题,感谢您的澄清。我以为stdout
会映射到System.out
。相关但不同的问题:如果源代码可用,能否将DLL改为使用stderr?尽管受信任的小程序可以重定向System.out
和System.err
,默认情况下,它们会转到控制台。@andreThompson:System.out/System.err
确实可以,这很好,我不想更改它。但是本机DLL中的stdout没有,我不知道如何修复这个问题,感谢您的澄清。我想stdout
会映射到System.out
。相关但不同的问题:如果源代码可用,能否将DLL改为使用stderr?在Windows上尝试了Firefox控制台(Firefox.exe-console)。当您不想覆盖stdout时,DLL输出不会出现,并且它总是默认为终端…在Windows上尝试了Firefox控制台(Firefox.exe-console)。当您不想覆盖标准输出时,DLL输出不会出现在那里,并且它总是默认为终端。。。