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 :

Fenetre trop longue a s'afficher


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
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut Fenetre trop longue a s'afficher
    Bonjour à tous,
    J'ai un problème bizarre. Dans mon logiciel, j'ai un module d'édition avec un bouton SAUVER. quand je clique sur SAUVER j'ai une fenetre qui s'affiche (JDialog) avec un Jlabel = "Veuillez patienter..." pendant que je mes à jour tout un tas de trucs. Cette mise à jour s'effectue dans un thread que je lance quand je clique sur SAUVER. Quand je clique sur SAUVER juste avant de lancer le thread je fais .setVisible(true) à ma fenetre.
    La mise à jour prend 3s max. La fenetre s'affiche mais le Jpanel ou Jdesktop ne s'affiche pas. Le thread arrive au bout de son execution et la fenetre se ferme.
    Je voudrais que la fenetre s'affiche completement ***** alors.

    le code de mon Jdialog est simple (j'utilise un JDesktopPane mais c t pour essayer si ca s'affichait plus vite ou pas qu'avec un Jpanel) :
    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
     
    	private class Patientez extends JDialog {
     
    		private static final long serialVersionUID = 1L;
    		private JDesktopPane jDesktopPane = null;
    		private JLabel jLabel = null;
     
    		public Patientez() {
    			super();
    			initialize();
    		}
     
    		private void initialize() {
    			this.setSize(211, 60);
    			this.setTitle("Mise à jour");
    			this.setContentPane(getJDesktopPane());
    			this.setLocationRelativeTo(this.getParent());
    			this.setAlwaysOnTop(true);
    		}
     
    		private JDesktopPane getJDesktopPane() {
    			if (jDesktopPane == null) {
    				jLabel = new JLabel();
    				jLabel.setBounds(new java.awt.Rectangle(41,20,134,26));
    				jLabel.setText("Veuillez patienter ...");
    				jDesktopPane = new JDesktopPane();
    				jDesktopPane.add(jLabel, null);
    			}
    			return jDesktopPane;
    		}
     
    	}
    Quand je clique sur sauver c'est très simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(e.getActionCommand().equals("editer_sauver"))
    {		
           this.patientez.setVisible(true);
    	maj.run();
    	...
    La methode Run de mon thread ce sont plein de boucle for.

    Ca a un peu le dont de m'énerver car j'ai le mauvais présentiment qu'il n'y a pas de solution.
    peut etre faire un timer d'un demi seconde avant de lancer la thread pour laisser la Jdialog s'afficher ?

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Ton probleme en fait c'est que ton JDialog s'ouvre mais le contenu ( donc de JLabel) ne s'affiche pas c'est ça ?
    Essai de mettre pack() dans la méthode initialize() de Patientez.
    Bonne chance.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    bah elle s'affiche quand je veux l'afficher à un autre endroit dans mon programme.
    mon truc c'est que la fenetre s'affiche à moitié. j'ai le contour avec la barre de titre, à la taille que je veux, tout gris à l'interieur et pas mon label ni mon desktop. et 3s après elle se referme car mon thread s'est terminé. Moi je voudrais qu'elle s'affiche completement.

    [edit] pack() n'arrange rien.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Par défaut
    Bah peut-être qu'elle a tout simplement pas le temps de s'afficher complétement, vu qu'en même temps tu fais tout un tas de truc sur tes données. Je crois que j'affichage et le traitement sont traités à part par la JVM ... 2 process différents. Mais je peux me tromper !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    l'affichage, enfin swing c'est le thread principal.
    bah si elle a pas le temps pourquoi s'afficher à moitié !

  6. #6
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if(e.getActionCommand().equals("editer_sauver"))
    {
            new Thread(new  Runnable(){
              public void run() {
                    SwingUtilities.invokeLater(new Runnable(){
                        public void run(){
                          this.patientez.setVisible(true);
                        }
                     });
            }
             }).start();
    	maj.run();

  7. #7
    Membre chevronné
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Par défaut
    Citation Envoyé par dr23fr
    bah elle s'affiche quand je veux l'afficher à un autre endroit dans mon programme.
    mon truc c'est que la fenetre s'affiche à moitié. j'ai le contour avec la barre de titre, à la taille que je veux, tout gris à l'interieur et pas mon label ni mon desktop. et 3s après elle se referme car mon thread s'est terminé. Moi je voudrais qu'elle s'affiche completement.

    [edit] pack() n'arrange rien.
    utilises le SwingUtilities.invokeLater()
    Tout le swing doit être geré par l'EDT.

  8. #8
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Citation Envoyé par dr23fr
    Quand je clique sur sauver c'est très simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(e.getActionCommand().equals("editer_sauver"))
    {		
           this.patientez.setVisible(true);
    	maj.run();
    	...
    La methode Run de mon thread ce sont plein de boucle for.

    Ca a un peu le dont de m'énerver car j'ai le mauvais présentiment qu'il n'y a pas de solution.
    peut etre faire un timer d'un demi seconde avant de lancer la thread pour laisser la Jdialog s'afficher ?
    Oui, mais un thread se lance par la méthode start, et non pas par la méthode run. Lance-le avec maj.start(), et à mon avis tout devrait s'arranger

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/03/2008, 11h57
  2. Erreur ORA-01704 : constante de chaine trop longue
    Par verrec_s dans le forum Oracle
    Réponses: 22
    Dernier message: 13/12/2004, 15h30
  3. [TP]Probleme de ligne trop longue
    Par poppels dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 24/09/2004, 06h36
  4. chaine trop longue pour envoyer en socket?
    Par jeje.r dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/06/2003, 16h36

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