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

AWT/Swing Java Discussion :

[JPROGRESSBAR] fermeture de la fenetre principal


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut [JPROGRESSBAR] fermeture de la fenetre principal
    Bonjour à tous,

    Je vous explique mon probleme : apres avoir cherché sur le net, sur la FAQ et sur le forum, je ne comprend toujours pas comment fonctionne ma JProgressBar.

    Je suis dans mon interface et j'appuie sur un bouton qui va me lancer un traitement qui peut durer plusieurs minutes.
    A ce moment la je decide de mettre une JProgressBar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void valideModification() {
    
                    // lancement du mon thread de calcul
                    ValideModification valide = new ValideModification();
    		valide.start();
    
    		int temps = (int) (getTailleDirectory(fichierAZipper) / 2500);
    
                    // je veux lancer ma progressBar
    		JProgress2 pj = new JProgress2(temps, "");
    		pj.lanceLongTraitement();
    }
    Le probleme c'est qu'à la fin de ma methode la fenetre principal se ferme. Or je voudrais que cette derniere reste ouverte jusqu'a ce que ma progresse bar se finisse. En fin de compte je voudrais que ma progresseBar se fasse dans l'EDT.


    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    public class JProgress2 extends Thread {
    	private JProgressBar progress;
     
    	private JFrame frame;
     
    	private int value;
     
    	private int temps;
     
    	/**
             * constructeur de la classe
             * 
             * @param temps :
             *            nombre de seconde pdt laquelle je veux que ma progressBar
             *            s'affiche
             */
    	public JProgress2(int temps, String s) {
     
    		frame = new JFrame(s);
    		this.value = 0;
    		this.temps = temps * 10;
    		this.progress = new JProgressBar(0, 100);
    		this.progress.setStringPainted(true);
    		frame.getContentPane().add(this.progress);
     
    		frame.setSize(250, 75);
    		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    		frame.setLocation(dim.width / 2 - frame.getWidth() / 2, dim.height / 2
    				- frame.getHeight() / 2);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
     
    	}
     
    	// cree un nouveau Thread et appelle la methode start
    	// Cf une documentation sur les Thread si vous ne comprennez pas le
    	// mecanisme ....
    	public void lanceLongTraitement() {
    		start();
    		// maintenant nous rendons la main au processus d'evenement
    	}
     
    	// methode de l'interface Runnable
    	// lance un nouveau thread qui va executer le code de la methode
    	// longTraitement
    	public void run() {
    		System.out.println("thread progress bar");
    		longTraitement();
    	}
     
    	public void longTraitement() { // execute la succession d'operation ...
    		// on est plus dans le processus d'evenement mais dans le nouveau Thread
    		for (int i = 0; i < 100; i++) {
    			uneOperation();
    			// maintenant on appelle la methode pour mettre a jour la barre
    			// de progression
    			majProgress();
    		}
    		frame.dispose();
    	}
     
    	// methode qui effectue une pause pour simuler une operation
    	private synchronized void uneOperation() {
    		try {
    			wait(temps);
    		} catch (InterruptedException e) {
    		}
    	}
     
    	// methode qui met a jour la JProgressBar par le processus d'evenement
    	// Pourquoi obliger l'execution de cette methode par le processus
    	// d'evenement ?
    	// -> Cf : la docs du tutoriel de Sun section : "Threads and Swing"
    	// http://java.sun.com/docs/books/tutorial/uiswing/mini/threads.html
    	public void majProgress() {
    		if (SwingUtilities.isEventDispatchThread()) {
    			progress.setValue(++value);
    		} else {
    			Runnable callMAJ = new Runnable() {
    				public void run() {
    					majProgress();
    				}
    			};
    			SwingUtilities.invokeLater(callMAJ);
    		}
    	}
    Je suis sur que c'est tres simple mais je ne trouve pas.
    Le thread de traitement se lance, il lance ma progresseBar, il ferme la fenetre principal et ensuite ferme les 2 threads à la fin.
    Comment lui faire dire d'attendre la fin de ma progressBar pour passer au reste.
    J'espere que j'ai été clair.
    Merci à vous

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    Tout le monde seche ou la reponse est evidente ?
    Faut il que ma classe JProgress2 etende de Thread

Discussions similaires

  1. [debutant] Pb fermeture d une fenetre
    Par yup dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/06/2006, 17h48
  2. Fermeture de la fenetre
    Par Osmani dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2005, 09h18
  3. [ApplicationFrame][jfreechart]fermeture d'une fenetre
    Par cmoa59 dans le forum Agents de placement/Fenêtres
    Réponses: 32
    Dernier message: 15/06/2005, 10h41
  4. evenement a la fermeture d' une fenetre
    Par Sh. dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/03/2005, 13h30
  5. Detecter la fermeture d'une fenetre MsDos
    Par Akta3d dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/07/2004, 16h53

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