2012-08-14 3 views
0

Mon applet Java signé charge une DLL native. La DLL imprime des traces sur stdout. Lorsque j'exécute l'applet sous Eclipse, je vois ces traces dans la console Eclipse. Mais je ne les vois pas dans la console Java quand je l'exécute comme une applet dans un navigateur web. Est-ce possible?stdout dans la console Java Applet

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

de Windows, de préférence Firefox s'il importe

+0

Bien qu'une applet de confiance puisse rediriger 'System.out' &' System.err', par *** default *** ils vont à la console. –

+0

@AndrewThompson: 'System.out/System.err' vraiment, et c'est très bien et je ne veux pas changer cela. Mais 'stdout' de DLL native ne fonctionne pas, et je ne sais pas comment résoudre ce problème –

+0

Merci pour la clarification. Je pensais que 'stdout' correspondrait à' System.out'. –

Répondre

3

Le stdout des DLL va habituellement à l'stdout du navigateur, au moins dans mon expérience. Donc, si tout ce que vous voulez c'est regarder ces messages, alors je vous suggère de démarrer votre navigateur à partir de la ligne de commande (au moins sur Linux) et regardez ce qui est imprimé ici. Je ne sais pas comment cela serait fait sur Windows. Rediriger le stdout pour la DLL poserait des problèmes: plusieurs applets de plusieurs pages peuvent être exécutées par le même processus d'extension, et comme les flux CI/O sont par processus, les rediriger pour une applet les redirigerait tout. Cela peut probablement être fait (en utilisant un tube et dup2 du côté natif), mais vous ne devriez suivre cette route que si l'applet est exécutée dans un environnement très contrôlé, où vous pouvez exclure une mauvaise interaction avec d'autres applets.

La solution appropriée, bien sûr, est que la DLL ne s'imprime pas sur stdout, mais utilise un rappel à la place. Si vous avez accès au code source de la DLL, c'est la solution que je préfère. Sinon, peut-être que vous pouvez parler aux auteurs de la DLL. Sur certaines plateformes (je connais Linux), vous pourriez obtenir des effets similaires en interceptant et en modifiant certains appels de bibliothèque à l'aide d'une bibliothèque d'interposeurs, mais c'est tout sauf portable. D'un autre côté, une DLL native n'est pas trop portable non plus, donc cela pourrait fonctionner pour vous.

+0

essayé Firefox console (firefox.exe -console) sur Windows. La sortie DLL n'apparaît pas ici –

+0

stderr est là pour quand vous ne voulez pas surcharger stdout et il est toujours par défaut au terminal ... – Shark