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 JDBC Singleton Pattern


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 69
    Points : 86
    Points
    86
    Par défaut JProgressBar JDBC Singleton Pattern
    Bonjour,

    J'ai un petit problème concernant une JProgressBar. Elle permet de faire patienter l'utilisateur et est lancé avant la connection.
    Lorsque je lance mon appli, la JProgressBar fonctionne correctement.
    Je fais en sorte de ne pas être connecté au réseau, ma JProgressBar me l'informe et plus tard lorsque je réessaye de me connecté, impossible d'afficher ma JProgressBar.

    Voila le code de la JProgressBar
    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
     public Progression(String nom)
        {
    	setSize(500, 100);
    	setAlwaysOnTop(true);
    	setLocationRelativeTo(null);
    	bar = new JProgressBar();
    	bar.setString(nom);
    	bar.setFont(new Font("Arial", Font.ITALIC, 18));
    	bar.setStringPainted(true);
    	bar.setBorderPainted(true);
    	getContentPane().add(bar);
        }
     
        public void start()
        {
    	setVisible(true);
    	bar.setIndeterminate(true);
        }
     
        public void message(String nom)
        {
    	bar.setString(nom);
        }
     
        public void stop()
        {
    	bar.setIndeterminate(false);
        }
     
        public void quit()
        {
    	dispose();
        }
    Le code de la connection au réseau :
    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
     private ConnectionBDD()
        {
    Progression progression = new Progression("tentative de connexion à la base de données...");
    	try
    	{
    	    progression.start();
                    // traitement connection
    	    progression.stop();
    	    progression.message("Connexion établit");
    	    Thread.sleep(5000);
    	    progression.quit();
     
    	}
    	catch (Exception e)
    	{
    	    progression.message("Erreur lors de la connexion");
    	    progression.stop();
    	    try
    	    {
    		Thread.sleep(5000);
    	    }
    	    catch (InterruptedException e1)
    	    {
    		e1.printStackTrace();
    	    }
    	    progression.quit();
    	    e.printStackTrace();
    	}
    une idée?

  2. #2
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Hum, je croit que le problème vient du fait que l'appel provient d'une méthode static.

    Quelqu'un peut m'expliquer en quoi une fenetre static est différente qu'une non static?

    [edit] Pour faire simple, j'aimerai masquer et afficher une fenetre statique. Lorsque je réaffiche cette fenetre, elle est vide et transparente

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En lieu et place d'un dispose dans ta classe connexion, ne vaudrait il mieux pas faire un setVisible?

    Car le dispose (qui, je suppose fait appel au dispose de ta JFrame/JDialog/JWindow) détruit ta fenêtre et libère les ressources natives associées, alors que le setVisible ne fait juste que cacher.

    Seconde chose, bien plus importante, il ne faut pas que tu fasses d'appel long (genre Thread.sleep(), requête vers une base de données ou un web service, lecture/écriture de fichier & cie) dans le Thread de ton interface graphique sous peine de bloquer toutes les opérations de dessin de Swing (par exemple, la JProgressBar ne bougera pas).

    Je te conseille la lecture des deux tutos suivants à cet effet:
    Celui ci pour comprendre le pourquoi du comment:
    http://gfx.developpez.com/tutoriel/j...ing-threading/

    Celui ci pour une solution recommandée:
    http://rom.developpez.com/java-swingworker/
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Salut,

    Merci pour le coup de pouce

    J'ai pas trop le temps de lire les tutos, mais en les survolant j'ai relevé 2 -3 petits trucs sympas. J'y reviendrai cette après midi ou avant si j'ai le temps.

    Je te remercie sinok

  5. #5
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Ok donc j'ai "compris" le principe de fonctionnement du premier tuto.

    Le second, je ne comprend pas quand est ce que la méthode process est appelée.

    Pour mon besoin, dans la méthode doInBackground j'affecte à une variable si la connection c'est correctement déroulée ou non.
    Dans done, en fonction de cette variable, je gère l'EDT.
    Est ce correct?

    [Edit] et si je mets un Thread.sleep() dans done, c'est le Thread EDT qui va être mis en pause?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour le SwingWorker:

    Le doInBackground s'exécute dans un threas séparé de l'EDT, il est don réservé aux traitements.
    Il peut, au moyen de la méthode publish passer des informations de progression/résultats de traitements partiels à la méthode process qui elle s'exécute dans l'EDT en parallèle du doInbackground et permet de modifier des composants graphiques lors du traitement.

    La méthode done s'exécute elle aussi dans l'EDT, une fois la méthode doInBackground exécutée.

    Tu as également la méthode setProgress qui déclenche un propertyChangeEvent dans l'EDT. (ce qui permet de notifier l'avancement de progression à divers Listener, on peut penser à un ProgressMonitor ou à une JProgressBar)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Septembre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Ok tout est plus clair

    Je te remercie sinok, c'est sympa à toi de prendre le temps

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/07/2014, 19h36
  2. Réponses: 3
    Dernier message: 21/02/2010, 19h09
  3. Singleton pattern : Swing -JSP
    Par philophobia dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/04/2006, 18h42
  4. [Design Pattern]Précision singleton
    Par laurent_ifips dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 21/03/2006, 22h12
  5. [Débutant] pattern singleton
    Par SirDarken dans le forum Débuter avec Java
    Réponses: 22
    Dernier message: 11/12/2004, 01h55

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