J'utilise une applet déployée via JWS (Java Web Start). Cette applet a des fonctionnalités natives incluses: JNA. User32, Kernel32 et Gdi32. Lorsque je lance l'applet via JWS, je reçois ce qui suit:Une bonne façon d'utiliser les bibliothèques natives dans JNA avec Applet déployé par JWS (java web start)
basic: LD - All JAR files signed: file:/C:/JavaApplication6/dist/launch.jnlp
basic: passing security checks; secureArgs:false, allSigned:false
basic: continuing launch in this VM
network: LDUpdater: started background update check
basic: JNLP2ClassLoader.findClass: winToJnaApi.NewApplet: try again ..
basic: JNLP2ClassLoader.getPermissions() ..
basic: Plugin2ClassLoader.getPermissions CeilingPolicy allPerms
security: JAVAWS AppPolicy Permission requested for: file:/C:/JavaApplication6/dist/JavaApplication6.jar
basic: JNLP2ClassLoader.getPermissions() X
basic: Applet loaded.
basic: Applet resized and added to parent container
basic: PERF: AppletExecutionRunnable - applet.init() BEGIN ; jvmLaunch dt 194323 us, pluginInit dt 462062 us, TotalTime: 656385 us
basic: JNLP2ClassLoader.findClass: winToJnaApi.APIManipulation: try again ..
basic: JNLP2ClassLoader.findClass: winToJnaApi.User32Extended: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.win32.StdCallLibrary$StdCallCallback: try again ..
basic: JNLP2ClassLoader.getPermissions() ..
basic: Plugin2ClassLoader.getPermissions CeilingPolicy allPerms
security: JAVAWS AppPolicy Permission requested for: file:/C:/JavaApplication6/dist/lib/jna.jar
basic: JNLP2ClassLoader.getPermissions() X
basic: JNLP2ClassLoader.findClass: com.sun.jna.Callback: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.win32.StdCall: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.AltCallingConvention: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.Library: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.Native: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.Callback$UncaughtExceptionHandler: try again ..
basic: JNLP2ClassLoader.findClass: com.sun.jna.Native$3: try again ..
Ceci est étrange, correct? Si je vérifie mes jars avec jarsigner, ils semblent tous être signés (j'utilise la signature automatique par Netbeans mais ça ne marche pas même si je les signe manuellement). Comme je suis assez nouveau à l'applet et à la technologie JWS, je me demande si l'essai à nouveau ... signifie que JNLP n'a pas pu trouver la classe appropriée. Ce qui est encore plus étrange est que si je définis une méthode native dans l'applet, par exemple une méthode qui en cliquant sur un bouton de l'applet me donne une boîte de message Windows, cela fonctionne si je clique sur le bouton de l'applet , mais si j'essaye d'invoquer la même fonction par javascript, il échoue. Donc, voici mon fichier .jnlp:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="file:/C:/JavaApplication6/dist/" href="launch.jnlp" spec="1.0+">
<information>
<title>JavaApplication6</title>
<description>blalbla</description>
<description kind="short">JavaApplication6</description>
</information>
<update check="background"/>
<security>
<all-permissions/>
</security>
<resources>
<j2se java-vm-args="-Djava.security.policy=applet.policy" version="1.5+"/>
<jar href="JavaApplication6.jar" main="true"/>
<jar href="lib/jna.jar"/>
<jar href="lib/platform.jar"/>
</resources>
<applet-desc height="300" main-class="winToJnaApi.NewApplet" name="JavaApplication6" width="300">
</applet-desc>
</jnlp>
Selon quelques informations que je trouve que je dois convertir user32_x86 répertoire du jna.jar dans un bocal sur lui-même et l'inclure comme href nativelib dans mon jnlp, mais ne fonctionne pas. En outre, essayer d'encapsuler tous les appels aux fonctions natives dans l'applet avec doPrivileged ne fonctionne pas non plus.
Toute aide serait appréciée
Toutes les fonctions d'applet que vous prévoyez d'appeler à partir de JavaScript doivent être enveloppées dans un bloc doPrivileged. – technomage
dans mon cas ce n'était pas le problème, mais plutôt le fait qu'il y avait des pots parmi mes pots qui n'étaient pas signés par la même autorité. TOUS les pots doivent être explicitement signés par LE MÊME auteur. –