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

Interfaces Graphiques en Java Discussion :

Arrêt d'une interface graphique pour que les instructions venant après soient exécutées


Sujet :

Interfaces Graphiques en Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Arrêt d'une interface graphique pour que les instructions venant après soient exécutées
    Bonjour,

    je rencontre actuellement un problème et je bloque totalement.

    J'ai le progamme mis en pièce jointe:

    problème.java

    Je ne sais pas comment faire pour qu'en quittant l'interface,

    1. mon programme ne s'arrete pas

    2. mon programme puisse continuer le traitement des instructions

    Ce qui m'embête, c'est que les instructions de mon programme sont prises en compte par l'interface qui l'affiche dans l'output, ce que je ne veux pas.


    J'ai tout essayé :

    dispose(), DISPOSE_ON_CLOSE sans que cela ne donne quelque chose de bien
    Merci
    Nom : prob.png
Affichages : 67
Taille : 13,5 Ko

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonjour,

    Un post suffit ^_^°.

    J'ai choisi celui la, j'ai du mal à voir exactement ce que tu souhaites faire,

    Ce que j'ai compris, actuellement tu as un traitement et tu passes par une fenêtre interface mais quand tu l'as ferme tu veux que le programme continue.

    Si c'est bien sa il faut que tu fasses ta JFrame dans un Thread. Ainsi dans le main tu démarres le thread, ta fenêtre se lancera et quand tu voudras la fermer tu n'auras qu'à stopper le thread.

    Le problème actuellement c'est quand faisant le DISPOSE_ON_CLOSE tu vas liberer la mémoire du processus java en cours ( ton main) donc ton programme s'arrête.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par XxArchangexX Voir le message
    Bonjour,

    Un post suffit ^_^°.

    J'ai choisi celui la, j'ai du mal à voir exactement ce que tu souhaites faire,

    Ce que j'ai compris, actuellement tu as un traitement et tu passes par une fenêtre interface mais quand tu l'as ferme tu veux que le programme continue.

    Si c'est bien sa il faut que tu fasses ta JFrame dans un Thread. Ainsi dans le main tu démarres le thread, ta fenêtre se lancera et quand tu voudras la fermer tu n'auras qu'à stopper le thread.

    Le problème actuellement c'est quand faisant le DISPOSE_ON_CLOSE tu vas liberer la mémoire du processus java en cours ( ton main) donc ton programme s'arrête.

    Merci XxArchangexX!

    En fait ce que tu m'as dit va bien m'aider!

    Je suis déjà parvenue à ne plus avoir les autres instructions qui apparaissent dans la fenêtre output.

    Je vais regarder un peu les Thread et appliquer ce que tu as suggéré.

    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai créé le thread

    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
     
     
    public class ThreadGUI extends Thread {
     
     
    	public void run () {
     
    		new TheGUI();
     
    	}
     
    public static void main(String[] args) {
     
    		ThreadGUI t = new ThreadGUI();
     
    		t.start();
     
            System.out.println("Hello!");
     
            System.out.println("Appeler");
     
        }
     
    }
    Mais quand je lance le programme, Hello et Appeler s'affichent directement, avant même mon interface.

    Peut être dois-je mettre un temps de traitement qui détruira ensuite le thread?

  5. #5
    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 : 42
    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 794
    Points
    48 794
    Par défaut
    Si tu fais tes traitements correctement, ça ne devrais pas être un problème. En effet, les traitements longs ne doivent, de toutes façons, pas se faire dans le thread graphique (EDT)

    Donc tu fais un new TheGUI(), qui retourne après avoir affiché l'interface, et ensuite tu fais toutes les instructions que tu veux, elles tourneront de toutes façons séparément de l'interface. Donc que tu cache ou pas ta fenetre, les instructions de ton main() continueront.

    Si ce sont des instructions que tu lance en rapport à un clic sur un bouton, alors regarde du coté de swingworker.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si tu fais tes traitements correctement, ça ne devrais pas être un problème. En effet, les traitements longs ne doivent, de toutes façons, pas se faire dans le thread graphique (EDT)

    Donc tu fais un new TheGUI(), qui retourne après avoir affiché l'interface, et ensuite tu fais toutes les instructions que tu veux, elles tourneront de toutes façons séparément de l'interface. Donc que tu cache ou pas ta fenetre, les instructions de ton main() continueront.

    Si ce sont des instructions que tu lance en rapport à un clic sur un bouton, alors regarde du coté de swingworker.
    Bonjour,

    je ne pense pas avoir compris ton message ...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai encore modifié le code,

    ça avance.

    Maintenant, les instructions apres ne s'affichent plus directement.

    Le seul problème c'est que quand je clique sur le bouton pour arrêter l'interface,

    eh.... ça l'arrête! sans arreter le programme mais n'affiche pas pour autant ce qui vient apres

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    public class TheGUI extends JFrame implements Runnable {
     
    private Thread threadEnCours;
     
     
    public TheGUI() {
         //instanciations
          this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
          //autres instanciations
        }
    public void run() {
            try {
              threadEnCours = Thread.currentThread();
              while(true) {
     
    		//CONTINUER
              }
            }
            finally {
              threadEnCours = null;
            }
          }
    public static void main(String[] args) {
     
    	 final TheGUI n = new  TheGUI();
    	 final Thread t = new Thread(n);
    	 t.start();
     
    	 while(t.isAlive())
    	 {
     
    	 }
     
         System.out.println("Hello!");
     
         System.out.println("Appeler");
     
     
    }
     
    }

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai finalement réussi ce que je voulais faire!


    Je mets le code au cas où ça aidera certains


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
     
    public class TheGUI extends JFrame
    {
     
     TheGUI()
    {
     
    //definir tout ici sauf le this.setDefalutCloseOperation!
     
     }
     
     
    static class ThreadGui extends Tread
    {
     
    protected volatile boolean running = true;
        	// ma variable pour verifer l arret 
    	public int stop =0;
     
        	 public void arret() { // Méthode 2
        	        running = false;
        	    }
     
        	 @Override
            public void run() {
                // Initialisation
                while(running) { // Boucle infinie pour effectuer des traitements.
                    // Traitement à faire
                    if (stop==1) // Méthode 1
                        running = false;
                }
            }
     
     
    }
     
    public static void main(String args[])
    {
     
    	// instructions
     
    	final TheGUI t = new TheGui();
     
     
            final ThreadGUI g = new ThreadGUI();
     
     
    	//lancement du thread 
     
    	g.start();
     
    	//action qui survient quand on clique sur X pour la fermeture,
    	//au lieu d'exit totalement elle detruit l'interface
            t.addWindowListener(new WindowAdapter() {
     
    				public void windowClosing(WindowEvent e) {
    					 System.out.println("Destruction interface");
    							// destruction 
    							  t.dispose();
    							  // finitions 
    							  System.gc(); //
    							  g.stop=1;
     
    				}
    			}) ;
     
             g.arret();
    	// instructions! qui continuent normalement
     
    }
     
     
    }

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/10/2016, 10h56
  2. Réponses: 3
    Dernier message: 01/03/2014, 09h20
  3. Réponses: 0
    Dernier message: 21/12/2011, 13h02
  4. une interface graphique pour manipuler les donnees
    Par kpatson dans le forum Outils
    Réponses: 3
    Dernier message: 27/05/2011, 13h39
  5. Développement d'une interface graphique pour scanner
    Par dewey01 dans le forum GTK+ avec C & C++
    Réponses: 13
    Dernier message: 01/02/2009, 23h18

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