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

Composants Java Discussion :

JProgressBar affichage différé


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut JProgressBar affichage différé
    Bonjour,

    J'ai essayé de faire une barre de de progression en partant du code donné dans la FAQ, mais cela ne marche pas correctement.

    En fait mon problème c'est que la barre de progression s'affiche et se rempli une fois que le chargement est fini.
    Donc je suppose que cela doit venir d'un problème de Thread.

    Mais je ne comprends pas très bien ce que je devrais faire pour que ça marche...

    En gros ce que j'ai fait, c'est que j'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    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++)
    		{	this.uneOperation ();
    			// maintenant on appelle la methode pour mettre a jour la barre
    			// de progression
    			this.majProgress (); 
    		}
    	}
    par :

    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
     
    public void longTraitement (){
    		projet.attribuerId();
     
    		String s1 = "INSERT INTO Projet (nom, fait) "
    			+ "VALUES ('" + projet.getNom() + "'," + projet.isFait()+");";
    		try{
    			Statement state = Elements.bdd.link.createStatement();
    			if (state.executeUpdate(s1) == 1) {
    				for(int i=0;i<projet.getBaies().size(); i++){
     
    					projet.getBaies().get(i).ajouterBDD(projet.getId());
    this.majProgress();
     
    				}
    			}else{
    				state.close();
    				JOptionPane
    				.showMessageDialog(null, "L'ajout de " + projet.getNom()
    						+ " a échoué", "Attention",
    						JOptionPane.WARNING_MESSAGE);
    			}
    		}catch (SQLException e){
    			e.printStackTrace();
    		}
    	}
    donc en gros, mon opération de base c'est projet.getBaies().get(i).ajouterBDD(projet.getId());
    qui ajoute un élément Baie dans ma BDD
    et suite à cette opération de base je met à jour la barre de chargement.

    Au moment où je charge mes baie,

    je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chargement = new BarreDeChargement(this.getBaies().size(), this);
    chargement.lanceLongTraitement();
    avec this une instance de la classe Projet (c'est le projet dont je parle plus haut dans projet.attribuerId();

    Pour finir, cette barre de chargement est insérée dans un JDialog, dont voici le début de la classe :

    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
     
    public class BarreDeChargement extends JDialog implements  Runnable {
     
    	//Variables
    	public static JProgressBar progress;
    	public static int value = 0;
    	private Projet projet;
     
    	//Constructeur
    	public BarreDeChargement(int nbOperation, Projet p) {
    		super ();
    		this.projet = p;
    		progress = new JProgressBar (0, nbOperation);
    		progress.setStringPainted (true);
    		this.add (progress);
    		this.setVisible (true);
    		this.setSize(new Dimension(300, 100));
    	}
    Avez vous une idée de ce qui cloche?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    C'est effectivement un problème de thread, tu exécutes ton traitement dans l'EDT ce qu'il ne faut pas faire.
    Voici quelques liens qui solutionneront ton problème :

    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ouais, enfin le code que tu donnes ici n'est pas des plus informatifs. En effet il manque toute la partie démarrage du Thread et gestion du retour dans l'EDT.

    Enfin quoi qu'il en soit je te conseille très fortement la lecture des tutos suivants qui expliqueront le problème que tu rencontre et te donneront la solution à utiliser.
    Le premier contient le nécessaire pour comprendre comment fonctionnent les interactions entre Swing et les Threads. Le second propose une solution élégante pour régler le problème en se basant sur la classe SwingWorker (et contient un exemple avec une JProgressBar).
    http://gfx.developpez.com/tutoriel/j...ing-threading/
    http://rom.developpez.com/java-swingworker/

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    je vais regarder cela merci bcp.

  5. #5
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut
    Bonjour, je repost sur ce topic pour ne pas en créer inutilement...
    Alors, j'a besoin d'aide sur :

    Mon code :

    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
     
    import javax.swing.JProgressBar;
    /*
    *
    */
    private JProgressBar jpb;
    bar = new JProgressBar();
    j = 0;
    bar.setMinimum(min);
    bar.setMaximum(max);
     
    /*
    *
    */
    panel.add(bar, c);
     
    ///
     
    for (int j=0; j<=100; j++)
    {
    bar.setValue(j);
    }
    try {
    Thread.sleep(100);
    }
    catch(InterruptedException e) {
    e.printStackTrace();
    }
    }
    Voila, question est: comment émulé un chargement de 3 voir 4 sec, étant donné qu'ici la JPB se charge instantannément.
    J'ai bien sur lu la javadoc, mais c'est tout a faire normal qu'il n'y pas écrit comment réalisé cela, car c'est plus une résolution algorithmique.

    Merci de vos éclairssissements

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/06/2011, 13h56
  2. [Toolbar] Affichage différé
    Par Invité dans le forum Ext JS / Sencha
    Réponses: 0
    Dernier message: 01/04/2011, 13h58
  3. [JProgressBar] Problème affichage lookandfeel
    Par matthieu86 dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 26/08/2008, 10h07
  4. Affichage image différé
    Par moogly_91 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/02/2008, 12h33

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