2012-08-14 5 views
0

서명 된 Java 애플릿이 원시 DLL을로드합니다. DLL은 추적을 stdout에 인쇄합니다. Eclipse에서 애플릿을 실행할 때 Eclipse 콘솔에서 이러한 추적을 볼 수 있습니다. 하지만 웹 브라우저에서 애플릿으로 실행할 때 자바 콘솔에서는 표시되지 않습니다. 전혀 가능합니까?Applet Java 콘솔의 stdout

<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> 

윈도우, 바람직하게는 파이어 폭스가

+0

신뢰할 수있는 애플릿은 'System.out' 및'System.err'을 *** default ***로 리디렉션 할 수 있지만 콘솔로 이동합니다. –

+0

@AndrewThompson :'System.out/System.err'은 실제로 그렇게하며 괜찮습니다. 그리고 이것을 바꾸고 싶지 않습니다. 하지만 네이티브 DLL의'stdout'은 그렇지 않습니다.이 문제를 해결하는 방법을 모르겠습니다. –

+0

설명해 주셔서 감사합니다. 나는'stdout'이'System.out'에 매핑 될 것이라고 생각했습니다. –

답변

3

된 DLL의 stdout을 중요한 경우는 일반적으로 적어도 내 경험에서, 브라우저의 stdout로 이동합니다. 따라서 원하는 모든 메시지가 필요하다면 명령 줄에서 브라우저를 시작하고 (적어도 Linux에서는) 브라우저에 무엇이 인쇄되는지 살펴 보시기 바랍니다. 이것이 Windows에서 어떻게 수행 될지 확신하지 못합니다.

stdout을 DLL로 리디렉션하면 여러 페이지의 여러 애플릿이 동일한 플러그인 프로세스에서 실행될 수 있으며 CI/O 스트림이 프로세스별로 하나의 애플릿을 리디렉션하면 리디렉션됩니다. 모든. 파이프 라인과 dup2 네이티브 측면에서 수행 할 수 있지만, 애플릿이 다른 애플릿과의 잘못된 상호 작용을 배제 할 수있는 매우 제어 된 환경에서 실행되면 해당 경로를 따라야합니다.

물론 올바른 해결책은 DLL을 표준 출력으로 인쇄하지 않고 대신 콜백을 사용하는 것입니다. DLL의 소스 코드에 액세스 할 수 있다면 그 해결책을 원합니다. 그렇지 않다면 아마 DLL의 작성자와 이야기 할 수 있습니다. 어떤 플랫폼에서는 (리눅스에 대해 알고있다.) 인터 포저 라이브러리를 사용하여 특정 라이브러리 호출을 인터셉트하고 수정함으로써 유사한 효과를 얻을 수도 있지만, 이식성이 뛰어나다. 반면 네이티브 DLL은 이식성이 떨어 지므로이 방법이 유용 할 수 있습니다.

+0

는 Windows에서 Firefox 콘솔 (firefox.exe -console)을 사용해 보았습니다. DLL 출력이 거기에 나타나지 않습니다. –

+0

stderr가 stdout을 무시하고 싶지 않고 항상 터미널을 기본값으로 설정할 때 사용합니다 ... – Shark