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 :

[Prbl] Thread(image ne s'affichant pas avant le thread.sleep


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut [Prbl] Thread(image ne s'affichant pas avant le thread.sleep
    J ai envi d'afficher une image,et que cette image disparaisse au bout de x seconde puis s'affiche un jfilechooser,continuer son code quoi

    En gros,je desirerais que l'image reste à l'écran avant de faire le thread.sleep,il y a bien une fenetre qui se lance mais aucune image...

    Voici 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
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    /*
     * fenetre.java
     *
     * Created on 24 juin 2006, 14:40
     */
     
    package projet;
     
    /**
     *
     * @author  sylv1
     */
    public class fenetre extends javax.swing.JFrame {
     
        /** Creates new form fenetre */
        public fenetre() {
            initComponents();
     
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
        private void initComponents() {
            jLabel1 = new javax.swing.JLabel();
            jButton1 = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            jLabel1.setIcon(new javax.swing.ImageIcon("C:\\Documents and Settings\\sylv1\\Mes documents\\Mes images\\AR0272-1.jpg"));
            jLabel1.setText("jLabel1");
     
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .add(21, 21, 21)
                    .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 377, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(41, Short.MAX_VALUE))
                .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(204, Short.MAX_VALUE)
                    .add(jButton1)
                    .add(202, 202, 202))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .add(32, 32, 32)
                    .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 256, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                    .add(jButton1)
                    .addContainerGap(43, Short.MAX_VALUE))
            );
            pack();
        }// </editor-fold>//GEN-END:initComponents
     
        /**
         * @param args the command line arguments
         */
     
     
                public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {           
                public void run() {
                     fenetre f=new fenetre();
                     f.setSize(600,450);
                    f.setVisible(true);
                    f.repaint();
     
               Object o=new Object();
    try
    {
        synchronized(o) { o.wait(4000);f.dispose();    }
    }
    catch(InterruptedException ex) { }
    JMyFileChooser j=new JMyFileChooser();
     
             //       try{
                //      Thread.sleep(4000); 
                      //  f.dispose();
             //  f.dispose();      
             //  JMyFileChooser j=new JMyFileChooser();
     
     
           //         }catch(InterruptedException e){e.printStackTrace();}
                }
            });
        }
     
        // Variables declaration - do not modify//GEN-BEGIN:variables
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        // End of variables declaration//GEN-END:variables
     
    }

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il ne faut pas bloquer le thread d'affichage sinon tu bloques toute ton application...

    Un peu de lecture : Threads et performance avec Swing par Romain Guy

    a++

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    t avoue que j ai lu le cours,et pas trop compris,si ca te dérange pas,peut tu plutot me donner un exemple ou bien...

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Lorsque tu developpes une application AWT/Swing, il y a un thread qui est crée dans le but de gérer l'affichage, cela concerne en particulier :
    • L'affichage et le rendu des composants
    • La gestion des évenements (souris, clavier, etc...)


    Ainsi toutes les actions qui doivent modifier ton interfaces graphiques doivent s'exécuter dans ce thread. On utilise pour cela les méthode invokeLater() et/ou invokeAndWait(). Sans oublier que toutes les méthodes "évenementielles" (actionPerformed(), mouseClicked(), etc.) sont déjà exécuter dans ce thread.

    Ce thread utilise une "queue" de tâche a effectuer. Lorsqu'une tâche est effectué, il passe à la suivante, etc.

    Donc IL NE FAUT PAS effectuer de traitements longs ou bloquant dans ce thread, sinon tu l'empêches de s'occuper des autres tâches qui lui sont attribué, ce qui revient a avoir une interface figé !!!


    Pour cela tu as plusieurs solutions :
    • Soit utiliser toi même des threads.
    • Soit utiliser SwingWorker (voir le tutoriel)
    • Soit utiliser un Timer pour planifier des traitements dans l'EDT


    Par exemple dans ton cas pour fermer la fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Création d'un Timer qui s'exécutera toutes les 4 secondes :
        new Timer(4000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                f.dispose(); // on ferme la fenêtre
                Timer timer = (Timer) e.getSource();
                timer.stop(); // on arrête le timer
            }
        }).start(); // démarre le timer

    a++

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci pour ta réponse claire

Discussions similaires

  1. Image ne s'affichant pas
    Par kariboo dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 14
    Dernier message: 18/03/2024, 11h42
  2. [JScrollPane][Canvas] L'image ne s'affiche pas
    Par TheReturnOfMuton dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 05/06/2006, 14h17
  3. [CSS] background-image ne s'affiche pas
    Par Ghost Warrior dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 25/12/2005, 02h29
  4. [asp] [crystal report] image ne s'affiche pas +impression
    Par mahboub dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 16/12/2005, 12h16
  5. [HTML Workshop] Mes images ne s'affichent pas
    Par lamarre aisha dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 25/10/2005, 14h33

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