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

NetBeans Java Discussion :

Intégrer un SplashScreen à une application Java avec NetBeans


Sujet :

NetBeans Java

  1. #21
    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
    Dans le manifest de ton jar il y a bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SplashScreen-Image: Photos/splash.png
    donc tu sais créer le jar correctement. Par contre, tu n'a pas, dans ce jar, de dossier "Photos". Ton splash.png se trouve à la racine. Donc soit tu met dans ton jar / projet un dossier Photos contenant le splash, soit tu change ta déclaration en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SplashScreen-Image: splash.png

  2. #22
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Le dossier Photos était ajouté après la compilation et le fichier splash.png y était inclus. (Je ne savais pas comment l'inclure dans le .jar). Disons que je prenais comme acquis que le compilateur savait ce qu'il faisait puisque dans l'exécution simple avec NetBeans il sait où il est. De plus, après l'ajout du dossier Photos, mon programme principal fonctionnait.

    Je crois que la bonne méthode pour inclure le dossier Photos dans le JAR est simplement de l'inclure dans le dossier src (depuis, il fait parti du JAR après compilation...)
    Effectivement, mon SplashScreen s'affiche merveilleusement bien maintenant mais les photos utilisées dans mon programme principal n'apparaissent plus.

  3. #23
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Si je décompresse le JAR, je vois bien que le dossier Photos y est maintenant présent ainsi que tout son contenu.
    Dans le dossier META-INF il y a bien le manifest qui se lit comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.9.1
    Created-By: 1.7.0_45-b18 (Oracle Corporation)
    Class-Path: lib/AbsoluteLayout.jar lib/swing-layout-1.0.4.jar
    SplashScreen-Image: Photos/splash.png
    X-COMMENT: Main-Class will be added automatically by build
    Main-Class: JeuCEP
    Quand j'exécute le programme dans NetBeans, tout fonctionne à merveille. Le SplashScreen s'affiche et le jeu possède ses photos contenues dans le dossier Photos.

    Comment se fait-il qu'avec le JAR, le splashScreen s'affiche mais le programme ne trouve plus ses photos? Malgré que le dossier Photos est bel et bien dans le JAR. Le seul moyen de faire est de copier le dossier photos dans le répertoire du JAR. Je me trouve donc alors à avoir un répertoire Photos inclus dans le JAR et un autre dans le même répertoire que le fichier JAR...???

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Cela vient à priori de la manière par laquelle tu accèdes à tes fichiers images : je parle précisément du moyen de résoudre le chemin d'accès au fichier image, et de la méthode d'accès à ce path (File ou URL).

    Lorsque le dossier d'images est dans un jar, il faut utiliser une méthode de résolution par Class.getResource() ( ou ClassLoader.getResource())), et un accès par URL, parce que forcément, un accès par File, ne pourra fonctionner (les éléments dans un jar ne sont pas des fichiers).

    A priori, je dirais que le code que tu utilises pour charger une photo est du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image = ImageIO.load( new File("Photos/truc.jpg") );
    alors qu'il vaudrait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image = ImageIO.load( getClass().getClassLoader().getResource("Photos/truc.jpg") );
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Pas exactement Joel:
    J'ai une classe Carte d'où je construit tous ses paramètres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     // Définition du constructeur
        public Carte(String urlDeFace, String urlDeDos, int numeroID, String lePrenom,String leNom, String leDepartement, String laFonction) {
             // Affichage des composants créés en mode Design
             initComponents();
             // Initialisation des propriétés par les méthodes set
             setUrlDos(urlDeDos);
             setUrlFace(urlDeFace);
             setId(numeroID);
             setPrenom(lePrenom);
             setNom(leNom);
             setDepartement(leDepartement);
             setFonction(laFonction);
             // et je fais des Set et des Get pour pouvoir les manipuler...
    Dans le programme principal, j'assigne les paramètres de chaque cartes dans un ArrayList:
    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
            listeCartes = new ArrayList<Carte>();          // Créer un tableau d'objets de type Carte
                //Créer une carte avec tous ses champs
                 listeCartes.add( new Carte("Photos/photo0.png", "Photos/dos.png", 0, "Capteur de position du papillon", "Throttle position sensor", "Description0","Système d'alimentation" ));
                 listeCartes.add( new Carte("Photos/photo1.png", "Photos/dos.png", 1, "Alternateur", "Alternator", "Description1","Système de charge" ));
                 listeCartes.add( new Carte("Photos/photo2.png", "Photos/dos.png", 2, "Amortisseur", "Shock absorber", "Description2","Système de suspension" ));
                             listeCartes.add( new Carte("Photos/photo50.png", "Photos/dos.png", 50, "Lien de barre stabilisatrice", "Stabilizer link", "Description50","Système de suspension" ));
                 listeCartes.add( new Carte("Photos/photo51.png", "Photos/dos.png", 51, "Embout de biellette", "Tie rod end", "Description51","Système de direction" ));
     
            Collections.shuffle(listeCartes);          // Mélanger toutes les photos du dossier de photos          
            listeCartes.subList((nombreDeCartes/2), listeCartes.size()).clear();  //Sélectionne que les 26 premières cartes de la liste
              int size=listeCartes.size();      //Double les premières 26 cartes
              for(int i=0; i<size; i++) {
                Carte carte = listeCartes.get(i);
                listeCartes.add(new Carte(carte.getUrlFace(),
                    carte.getUrlDos(),
                    carte.getId(),
                    carte.getPrenom(),
                    carte.getNom(),
                    carte.getDepartement(),
                    carte.getFonction()
    Finalement j'appelle une méthode afficherLesCartesAvecEvt(); pour les afficher:
    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
        private void afficherLesCartesAvecEvt(){
             for (int i=0; i  < nombreDeCartes; i++) {
                 // Placer les cartes dans le Panneau grilleDeCartes
                  PanneauCartes.add(listeCartes.get(i));
                  // Ajouter un écouteur d'événements sur chaque carte de la liste
                  listeCartes.get(i).addMouseListener(new java.awt.event.MouseAdapter() {
                        @Override
                        // Lorsque la carte reçoit l'événement mousReleased
                         public void mouseReleased(java.awt.event.MouseEvent evt) {
                            // exécuter la méthode :
                            carteMouseReleased(evt);
                         }
                   });
             }
        }

  6. #26
    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
    Oui, c'est bien, mais on ne vois toujours pas où tu charge tes images

  7. #27
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Dans ma classe Cartes j'ai une méthode qui les affichent unes après l'autres.:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        // Méthode métier qui affiche la photo associée à l'url passée paramètre
         public void affichePhoto(String temporaire){
             ImageIcon icon = new ImageIcon(temporaire);
             photoLbl.setIcon(icon);
         }

  8. #28
    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
    remplace par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        // Méthode métier qui affiche la photo associée à l'url passée paramètre
         public void affichePhoto(String temporaire){
             ImageIcon icon = new ImageIcon(getClass().getClassLoader().getResource(temporaire));
             photoLbl.setIcon(icon);
         }

  9. #29
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup.
    Malgré que je ne saisis pas trop ce que je viens de changer, tout fonctionne à merveille.
    Ma dernière étape est de le transformer en exécutable windows (.exe).

    1 - Suis-je toujours au bon endroit?

    2 - J'ai téléchargé JLaunch4 qui me semble assez complet.

    J'ai tenté un premier essai de compilation mais je me retrouve au point de départ: Pas de SplashScreen mais le programme principal démarre par la suite.

    3 - Quand l'exe est entièrement fonctionnel et compilé, le répertoire lib et le .jar (dans le même répertoire) sont-ils toujours obligatoires? Dois-je les faire suivre avec le fichier .exe?

    4 - L'utilisateur du fichier .exe doit-il avoir installé Java sur son ordinateur pour faire fonctionner mon programme?

  10. #30
    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
    3 -> je ne pense pas, sinon je ne vois pas l'intéret de faire un exe si c'est pour continuer à se coltiner toute la famille avec

    4-> non, pareil, je ne vois pas l'intérêt de faire un exe si c'est pour demander à l'utilisateur de télécharger java avant. Généralement les outils pour faire des exe empaquetent tout dans l'exe: les librairies et la jvm. Ce qui te fait aboutir du coup à un exe massif.....


    Je n'ai jamais vu l'intéret de faire du java pour terminer avec un .exe qui ne marchera que sous windows

  11. #31
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Ceux qui vont l'utiliser ne connaissent que Windows (pas jeunes les vieux...) et ne veulent surtout pas à avoir à installer quelque chose d'autres (Java)...

    C'est le seul intérêt

  12. #32
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Citation Envoyé par Mario Cayer Voir le message
    C'est le seul intérêt
    Ce n'est pas un intérêt alors, c'est une contrainte...
    Faire une ReadMe, ce n'est pas sorcier, surtout pour leur dire d'installer java et de cliquer sur le jar (expérience vécue, et ça s'est très bien passé).

    De toute façon, JLaunch nécessite toujours une JVM pour lancer le prog java si je ne m'abuse. Si il n'en trouve pas, il renverra vers la page pour l'installer (sauf si ça a changé depuis la dernière fois que je m'en suis servi).

    Pareil pour tous les autres launchers de ce type.
    Vois également JSmooth et JavaExe (sur la page des outils, ou fais une recherche internet), mais ils fonctionnent sur le même principe... (attention à l'option "JVM Bundle" de Jsmooth qui ne fait pas un bundle de la JVM... mais qui dit juste où aller chercher le bundle!)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  13. #33
    Membre à l'essai
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2013
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 52
    Points : 20
    Points
    20
    Par défaut
    Merci pour les infos.

    Une dernière question:
    Le .jar est multiplateforme PC, Apple, Linux...)
    Va-t'il aussi s'exécuter sur une tablette Android et Mac?

  14. #34
    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
    android => non

    mac => oui si un jvm est installée.

Discussions similaires

  1. Intégrer JasperReport dans une application Java
    Par jasmine22 dans le forum Jasper
    Réponses: 1
    Dernier message: 01/08/2012, 08h38
  2. connecter une application java avec une bd access
    Par laminou19 dans le forum JDBC
    Réponses: 1
    Dernier message: 16/04/2011, 22h43
  3. generer l'exe d'une application java avec JavaExe
    Par ammouna8888 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 13/07/2010, 16h26
  4. [débutante]Intégrer flash dans une application java
    Par bouba83 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 11/05/2006, 11h11

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