IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Accès aux librairies locales à partir d'une applet


Sujet :

Applets Java

  1. #41
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Oui, c'est vrai ça, tiens !!!!!

    Oups, j'étais tellement dans mon truc que je ne m'en étais même pas rendu compte.

    C'est pas très beau ...

  2. #42
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Savez-vous comment on récupère le path des ressources downloadées sur le poste client à partir de l'applet ?

    J'ai essayé la solution de fxrobin en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getResource("jniApi.dll");
    Mais j'ai toujours null dans url ????

    Pourtant ma dll est contenue dans un jar (à la racine) qui est bien indiqué dans mon fichier jnlp via la balise nativeLib ????

  3. #43
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Alors, à mon avis il faut que tu fasses une classe "LibLoader" par exemple que tu mets dans le même JAR que tes DLL.

    ensuite tu fais une méthode static dedans au même endroit (racine) qui te permettra de récupérer un inputstream dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class LibLoader
    {
      public static InputStream getResource(String name)
      {
        return LibLoader.class.getResourceAsStream(name);
      }
    }
    et tu l'appelles comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LibLoader.getResouce("madll.dll");
    pour que ça fonctionne il faut que tes dll et "LibLoader" soient dans le même package, sinon il faudra que tu donnes un chemin absolu pour le nom de ta dll.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  4. #44
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par maverick5051 Voir le message
    Savez-vous comment on récupère le path des ressources downloadées sur le poste client à partir de l'applet ?

    J'ai essayé la solution de fxrobin en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getResource("jniApi.dll");
    Mais j'ai toujours null dans url ????

    Pourtant ma dll est contenue dans un jar (à la racine) qui est bien indiqué dans mon fichier jnlp via la balise nativeLib ????
    Si c'est à la racine, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL url = getClass().getResource("/jniApi.dll");
    Class.getRessoure résoud relativement au fullname de la classe

  5. #45
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Bon ré-essai ce matin à tête reposée :

    Au final, j'ai réussi à faire fonctionner le getResource ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cl.getResource("jniApi.dll");
    et le System.loadLibrary ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.loadLibrary("jniApi");
    En fait, je me suis aperçu que mon jar contenant les DLLs était corrompu => j'ai refait le jar et c'est OK.

    Conclusion: après quelques tests, je n'ai finalement pas le choix => je suis obligé de faire modifier le code de l'api par l'équipe extérieure (j'espère qu'ils vont accepter) car leur code, même en mettant les DLLs au même endroit que l'api, cela ne fonctionne pas.
    (pour rappel, pour récupérer le chemin de la DLL, ils font
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    URL codeURL = ApiJNI.getProtectionDomain().getCodeSource().getLocation();
    String path = URLDecoder.decode(codeURL.getFile(), "UTF-8");
                path = (new File(path)).getCanonicalFile().getParentFile().getAbsolutePath();
    File libFile = new File(path, libName);
    String path = libFile.getAbsolutePath();
    System.load(path);
    Merci à vous 2 pour votre aide.

  6. #46
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Visiblement, tu as le code de la librairie externe. Moi je ne me casserais pas la nenette si ils refusent => je patch moi même, puisque de toutes façons, c'est moi qui distribue le jar

  7. #47
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Exact,

    Je supprime le .class qui m'ennuie et je le remplace par le mien, le tout repackagé dans le JAR ... et hop
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  8. #48
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Disons qu'un petit coup de jad rend bien des services quand on a aucune doc

    Pour vos solutions, c'est la 1ère chose que j'ai fait. Malheureusement (ou heureusement, ça dépend du point de vue), leur jar est signé par un certificat (que je ne détiens pas bien sûr)

  9. #49
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Auriez-vous une idée par hasard sur le problème suivant ?

    Dans mon fichier JNLP principal où j'ai défini mon applet, je définis mon extension vers un autre fichier JNLP ainsi que des propriétés système.

    Dans mon applet, quand je fais un Sytem.getProperty(), cela me retourne null. Si maintenant, je mets les propriétés système dans le fichier jnlp d'extension, je récupère bien mes propriétés ?????

    Voici mon fichier JNLP principal portant l'applet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?xml version="1.0" encoding="UTF-8"?>
    <jnlp spec="1.0+" codebase="" href="">
    	<information>
    		<title>Agent de communication</title>
    	</information>
     
    	<security>
    			<all-permissions/>
    	</security> 
     
    	<update check="always" policy="always"/>
     
    	<!-- Application Resources -->
    	<resources>
    		<java href="http://java.sun.com/products/autodl/j2se" version="1.6+"/>
    		<jar href="AgentComSigne.jar" main="true"/>
    		<extension name="nativeLib" href="nativeLib.jnlp"/>
    		<property name="log4j.configuration" value="log4j.properties" />
    		<property name="local" value="false" />
    	</resources>	
    	<applet-desc name="Agent de communication Applet" main-class="AgentCommunicationJNLP" width="400" height="30"></applet-desc>
    </jnlp>
    Et mon JNLP secondaire nativeLib.jnlp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <jnlp spec="1.0+" codebase="http://55.37.68.56/" href="nativeLib.jnlp">
    	<information>
    		<title>Librairies natives</title>
    	</information>
     
    	<security>
    			<all-permissions/>
    	</security> 
     
        <resources>
    		<nativelib href="externaljars/nativeLib.jar"/>
        </resources>
     
    	<component-desc/>
    </jnlp>

  10. #50
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    ton applet est signée ?
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  11. #51
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Oui

    Une piste tout de même => mon fichier jnlp est externe à mon jar et lui n'est pas signé ... (mais c'est aussi le cas pour mes extensions donc ??? )
    Piste à étudier demain ...

    Y'a possibilité de mettre mes jnlp dans mon jar contenant l'applet et de les appeler depuis ma page web ?

  12. #52
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Citation Envoyé par maverick5051 Voir le message
    Oui
    Y'a possibilité de mettre mes jnlp dans mon jar contenant l'applet et de les appeler depuis ma page web ?
    euh ... joker ...

    tu peux peut-être essayer d'embarquer une JVM dans ton JAR ...






    euh je blague hein
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  13. #53
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Ah bon ? on peut faire ça

    Oui bon, d'accord, un JNLP qui fait référence à un jar dans lequel il est contenu, je t'accorde ton joker. Je vais plutôt aller me coucher là, ça sera mieux pour tout le monde

  14. #54
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Euh, finalement, mon idée n'était pas si saugrenue que cela.

    En lisant les specs JSR-056 => http://fr.scribd.com/doc/6677/jnlp1-0-1spec au chapitre 5.4.1, on peut voir:

    A JNLP file is signed by including a copy of it in the signed main JAR file
    .
    The copy must match theJNLP file used to launch the application. The signed copy must be named:
    JNLP-INF/APPLICATION.JNLP
    . The
    APPLICATION.JNLP
    filename should be generated in upper case,but should be recognized in any case

    Test effectué et ça fonctionne => mes propriétés système sont maintenant bien lues

    je trouve quand même discutable cette "technique" ...

  15. #55
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Et bien ce qui est bien avec Java, c'est qu'on a beau en faire depuis des années, on en apprend tous les jours. Merci pour l'info.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  16. #56
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 32
    Points : 10
    Points
    10
    Par défaut
    Précision sur la solution => il faut valoriser les attributs codeBase et href malgré qu'il soit indiqué dans la doc oracle que le mieux est de les laisser vides ...

    Sinon, on se tape un BadFieldException: Le champ <jar>href contient une valeur non valide dans le fichier de lancement signé ...

    Par contre, est-il normal que quand j'indique en codeBase => http://monIP, cela ouvre une nouvelle console java lorsque j'exécute mon applet ????

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. comment accéder aux ressources locales à partir d'une appli web
    Par lginoux dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 01/04/2009, 10h46
  2. Réponses: 1
    Dernier message: 19/02/2008, 09h03
  3. impossible de copier coller à partir d'une applet
    Par sof1980 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 20/10/2006, 15h58
  4. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  5. [IO][FTP] faire un FTP a partir d'une applet
    Par irkirabie dans le forum Applets
    Réponses: 3
    Dernier message: 19/11/2004, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo