Exécution différente sous Eclipse et sous forme de fichier .jar

Résolu/Fermé
Gian-Piero Messages postés 5 Date d'inscription mercredi 11 mai 2016 Statut Membre Dernière intervention 21 mai 2016 - Modifié par Gian-Piero le 11/05/2016 à 15:50
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 - 15 mai 2016 à 13:07
J'utilise Eclipse Luna 4.4.1 sous openSUSE 13.2. J'ai réalisé une application qui fonctionne correctement sous Eclipse mais pour laquelle une fonctionalité n'est pas utilisable lorsque j'utilise le fichier .jar correspondant, sous Linux, Windows ou Mac.
La fonctionalité posant problème est la fermeture de l'application au moyen de la croix située en haut à droite de la fenêtre. L'application est fermée par ce moyen dans Eclipse mais pas avec le fichier .jar.
Voici les codes correspondant:

import javax.swing.JOptionPane;

public class Main {
public static void main(String[] args) {
final CinFrame cf = new CinFrame();

SplashScreen splash = new SplashScreen(4000);
splash.showSplash();
// Fermeture de l'application par la croix à droite en haut
cf.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(cf,
"Quitter vraiment l'application?", "Quitter l'application?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
}
}

Dans le JFrame CinFrame, j'utilise la ligne:

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

J'ai d'autre part une position "Quitter l'application" dans un menu qui est la fonction principale à utiliser pour terminer l'application.
Où se trouve l'erreur? Merci par avance de vos réponses.
A voir également:

4 réponses

greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
13 mai 2016 à 17:38
Salut, j'ai testé et ça fonctionne bien chez moi autant sur Eclipse que dans un .jar encapsulé.
0
Gian-Piero Messages postés 5 Date d'inscription mercredi 11 mai 2016 Statut Membre Dernière intervention 21 mai 2016
14 mai 2016 à 08:48
Merci de ta réponse.
Aurais-tu l'amabilité de me dire quelles versions de JDK tu utilises dans Eclipse et quelle version du JRE dans ton OS?
Merci par avance de ta réponse.

Gian-Piero
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
14 mai 2016 à 13:47
Je suis en JDK et JRE 1.8, tu peux aussi lancer ton JAR depuis la console via la commande java -jar <path> histoire de voir s'il y a des erreurs.

Sinon la solution de KX est aussi à tester.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
14 mai 2016 à 12:51
Bonjour,

Pour ton problème la seule explication que j'ai c'est que tu ne passes pas par l’événement windowClosing auquel tu t'attends.

Tu pourrais utiliser le code suivant pour afficher tous les événements et identifier les différences qu'il y a entre Eclipse et ton jar.

https://codes-sources.commentcamarche.net/source/100424-afficher-tous-les-evenements-d-un-composant-awt-swing

import java.io.File;
import javax.swing.JOptionPane;
import ccm.kx.swingTools.ListenerLogger;

public class Main {
    public static void main(String[] args) {
        ListenerLogger.setPath(new File("src"));
        final CinFrame cf = new CinFrame();
        ListenerLogger.logListeners(cf);

        SplashScreen splash = new SplashScreen(4000);
        splash.showSplash();
        // Fermeture de l'application par la croix à droite en haut
        cf.addWindowListener(new java.awt.event.WindowAdapter() {
            @Override
            public void windowClosing(java.awt.event.WindowEvent windowEvent) {
                if (JOptionPane.showConfirmDialog(cf,
                        "Quitter vraiment l'application?", "Quitter l'application?",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
                    System.exit(0);
                }
            }
        });
    }
}
0
Gian-Piero Messages postés 5 Date d'inscription mercredi 11 mai 2016 Statut Membre Dernière intervention 21 mai 2016
15 mai 2016 à 12:32
Merci à tous pour vos réponses.
En fait, le problème vient du fait que j'ai commis une erreur impardonnable, qui est la suivante:
mon code comprend la ligne:
splash.showSplash();

pour gagner du temps en développant, je n'ai pas placé l'image correspondante dans le répertoire de travail, au lieu de simplement commenter la fameuse ligne!
Mea culpa, mea maxima culpa!
Merci encore à tous.
0
greg6614 Messages postés 592 Date d'inscription vendredi 7 août 2009 Statut Membre Dernière intervention 3 juin 2017 107
15 mai 2016 à 13:07
Ha oui exact, pour l’exécution je l'avais commenté car pas d'image chez moi.
0