Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Applet Java控制台中的stdout_Java_Windows_Applet_Console_Stdout - Fatal编程技术网

Applet Java控制台中的stdout

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

我的签名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="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输出不会出现在那里,并且它总是默认为终端。。。