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

Résolu
Gian-Piero Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
greg6614 Messages postés 592 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   107
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   107
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   107
 
Ha oui exact, pour l’exécution je l'avais commenté car pas d'image chez moi.
0