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

JWS Java Discussion :

Accéder à un jar via un autre


Sujet :

JWS Java

  1. #1
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut Accéder à un jar via un autre
    Bonjour tout le monde !

    Bon le titre n'est pas très explicite, mais c'est le mieux que j'ai trouvé...
    Voilà j'ai un jar principal que je lance sous Java Web Start et qui contient mon application. Ensuite j'ai dans un dossier séparé d'autres jar qui contiennent des fichiers que je voudrais charger via mon jar principal (un seul jar chargé à la fois), et je me pose plusieurs questions :

    - Est-il possible d'accéder aux fichiers présents dans un jar via un autre et de scanner les fichiers présents dans un répertoire de ce jar ?
    - Est-il possible sous Java Web Start de charger un jar après le lancement de l'application (pour accéder plus rapidement aux fichiers de ce jar, plus rapidement que sur une adresse ftp) ?

    Merci d'avance à ceux qui auront l'amabilité de répondre à ces questions !!!

  2. #2
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    Est-il possible d'accéder aux fichiers présents dans un jar
    http://www.javaworld.com/javaworld/j...javatip49.html
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  3. #3
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup pour cette réponse, çà va vraiment m'aider !

    Et sinon pour la deuxième question, est-ce possible de charger un 2ième jar avec Java Web Start (à partir d'une application) ; parce que si je scanne un dossier présent sur mon adresse ftp, cela prend 2 fois plus de temps que lorsque je lance l'application à partir de mon disque dur.

    Je voudrai donc lancer un premier jar qui est mon application principale. Ensuite l'utilisateur choisirait un autre jar parmi plusieurs, jar qui contiendrait des fichiers : le but étant que ce jar soit chargé avec JWS pour un scan des fichiers plus rapide. Est-ce possible et si oui, comment ?

    Merci d'avance !!!

  4. #4
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    peut-etre que tu devras implementer ton propre jws en utilisant son api :
    http://java.sun.com/products/javaweb...load-spec.html

    Ou peut-etre utiliser le class loader de l'application principale (1er jar) utilisé par jws :

    NomDeTaClasse.getClass().getClassLoader();

    et tu essaies de charger ton jar grâce à ce loader .

    Déjà là je dois peut-etre te dire des c*nneries . Faudrait qu'un bon donne son avis.
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  5. #5
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Désolé de répondre si tard...

    Alors voilà j'ai parcouru un peu le lien que tu m'as donné et j'ai téléchargé ce qu'il fallait, et j'ai trouvé çà (à la section "4.4 Parts and lazy downloads") :

    JAR files and parts can also be requested to be downloaded explicitly by the application program using the JNLP API. This is described in Section 5.3
    Apparemment il serait possible d'appeler le téléchargement d'un .jar via l'application lancée.
    Mais le problème c'est qu'il n'y a rien là-dessus à la section 5.3 !

    Est-ce que quelqu'un saurait comment faire ou bien où regarder ?
    Merci d'avance !!!

  6. #6
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Je crois que j'ai trouvé un truc intéressant avec le DownloadService de l'API JNLP : apparemment on peut charger et décharger les ressources que l'on veut. Le seul petit bémol est que les noms de ces ressources doivent figurer dans le fichier JNLP...
    Enfin c'est normal au niveau sécurité...

    Je vais regarder çà et je vous tiens au courant, merci encore !

  7. #7
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Bon j'ai essayé avec la fonction "loadPart(String part, DownloadServiceListener dsl)" du DownloadService de JNLP, qui permet de charger dans le cache un fichier jar, mais y'a un problème : çà me charge bien mon fichier jar principal (Town3D.jar) au lancement de l'application, mais également le fichier jar secondaire (oui.jar), alors que je voudrais le lancer par la suite à la demande de l'utilisateur.

    Voilà le fichier jnlp que j'utilise pour le lancement de mon jar principal (Town3D.jar) :

    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
    24
    25
    26
    27
    28
    29
    <?xml version="1.0" encoding="utf-8"?>
    <!-- JNLP File for Town3D Application -->
    <jnlp
     spec="1.0+"
     codebase="http://mfrac10.free.fr/Java/"
    href="Town3D.jnlp">
     
    <information>
    	<title>Town 3D</title>
    	<vendor>???</vendor>
    	<homepage href="HTML.html"/>
    	<description>3D Vizualisation</y>
    	<description kind="short">???</description>
    	<icon href="http://mfrac10.free.fr/Java/Pictures/Up.png" kind="default"/>
    	<offline-allowed/>
    </information>
     
    <security>
    	<all-permissions/>
    </security>
     
    <resources>
    	<j2se version="1.3+"/>
    	<jar href="Town3D.jar"/>
    	<jar href="oui.jar" part="oui" download="lazy"/>
    </resources>
     
    <application-desc main-class="Town3D"/>
    </jnlp>
    Logiquement la commande download="lazy" ne devrait pas lancer le jar secondaire (oui.jar), mais être lancé dès que l'application en a besoin : or je n'en ai jamais besoin dans mon application ; j'ai juste une fonction lorsque l'utilisateur clique sur un bouton, çà charge le jar dans le cache.
    Ce que je voudrais faire à la fin, c'est de permettre à l'utilisateur de choisir le jar qu'il veut charger, et non que Java Web Start charge tous les jar par défaut...

    Voilà, si quelqu'un à déjà essayé quelque chose comme çà, ou a une idée, çà serait cool !

  8. #8
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    Ca donne quoi avec la possibilité de solution que je t'ai donné plus haut (charger le jar avec le class loader de l'application lancée par le 1er jar)?
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  9. #9
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Tout d'abord, merci bien d'essayer de m'aider !

    Ensuite, c'est qu'en fait je vois pas trop comment lancer un jar avec ce ClassLoader : dans la doc, il n'y a que des méthodes pour lancer des class (loadClass(String name"))...

  10. #10
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    je m'imaginais qu'avec "getResource(pathDuJarNonTelechargé") tu pouvais obliger jws à le recupéré :-s
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  11. #11
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    En fait, je ne vois pas trop quel serait le type renvoyé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getClass().getClassLoader().getResource("jarQueJeVeuxCharger.jar");
    Avec des images, pas de problème je vois, mais là je ne vois vraiment pas.
    Désolé, si je suis un boulet...


    [EDIT] Heu, en fait pas besoin de spécifier le type, mais bon çà ne provoque rien en fait cette commande.

  12. #12
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    Ok, je crois que j'ai réussi, enfin...

    En fait, j'ai déclaré mes ressources dans le fichier jnlp comme suit (j'ai rajouté main="true" pour le jar principal) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <resources>
    	<j2se version="1.3+"/>
    	<jar href="Town3D.jar" main="true"/>
    	<jar href="oui.jar" part="oui" download="lazy"/>
    </resources>
    et dans le code de mon application, j'ai utilisé un "loadResource" au lieu du "loadPart" :
    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
    24
    25
    26
    27
    DownloadService ds;
    
    try {
    	ds = (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService");
    } catch (UnavailableServiceException e) {
    	ds = null;
    }
    
    if (ds != null) {
    
    	try {
    		// determine if a particular resource is cached
    		URL url = new URL("http://mfrac10.free.fr/Java/oui.jar");
    		boolean cached = ds.isResourceCached(url, null);
    		// remove the resource from the cache
    		if (cached) {
    			ds.removeResource(url, null);
    			JFrame frame = new JFrame();
    			JOptionPane.showMessageDialog(frame, "Erase from the cache", "Oui", JOptionPane.INFORMATION_MESSAGE);
    		}
    		// reload the resource into the cache
    		DownloadServiceListener dsl = ds.getDefaultProgressWindow();
    		ds.loadResource(url, null, dsl);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    }
    Voilà, merci beaucoup pour ton aide orelero !!!

    P.S. : par contre il se passe des trucs bizarres avec le Visualisateur de cache de JWS : quand je supprime l'application du cache (clic droit, supprimer) et que je la relance à partir de mon adresse ftp, le fichier jnlp se trouve changé dans le cache de JWS... Enfin, si çà revient, je posterai un nouveau topic.

  13. #13
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    quand je supprime l'application du cache (clic droit, supprimer) et que je la relance à partir de mon adresse ftp, le fichier jnlp se trouve changé dans le cache de JWS
    Ouai c'est bizarre tu relances ton application comment ?
    En tout cas merci de publier la solution .
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  14. #14
    Membre du Club Avatar de Frac10
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 81
    Points : 43
    Points
    43
    Par défaut
    En fait çà me l'a fait qu'une fois pour l'instant, mais c'est quand je supprime mon application du cache du Visualisateur JWS et qu'ensuite je la relance à partir du fichier .jnlp présent sur mon adresse ftp (donc à partir d'une page html)... Mais bon, si çà me le refait, je ferai d'abord des recherches et si çà se révèle infructueux, je ferai un nouveau post.

    Sinon concernant la solution, je l'ai mise dans ma réponse précédent : il suffit de mettre dans le fichier .jnlp pour le jar principal, main="true" et pour les jar secondaires, download="lazy". Ensuite lorsque l'on veut charger un jar à partir de l'application, il suffit d'appeler la méthode loadResource(urlDuJarQueJeVeuxCharger, null, downloadServiceListener)...

    Voilà, merci pour ton aide encore !

  15. #15
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    Sinon concernant la solution, je l'ai mise dans ma réponse précédent : il suffit de mettre dans le fichier .jnlp pour le jar principal
    Oui je sais, je voulais juste dire merci pour avoir publié la solution .

    Voilà, merci pour ton aide encore !
    C'est quand même toi qui a tout fait
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CF][VB.NET/PPC] Comment installer un .cab via un autre .cab ?
    Par borgfabr dans le forum Windows Mobile
    Réponses: 8
    Dernier message: 04/05/2005, 12h42
  2. Réponses: 22
    Dernier message: 03/02/2005, 16h43
  3. [FireBird] Accéder à une vue via Excel
    Par Vonotar dans le forum Débuter
    Réponses: 1
    Dernier message: 07/12/2004, 09h31
  4. Réponses: 2
    Dernier message: 28/10/2004, 16h54
  5. Passer pointeur via message à autre prog
    Par YéTeeh dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/08/2003, 23h08

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