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

SWT/JFace Java Discussion :

Shell et Thread


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut Shell et Thread
    Bonjour à tous,
    j'ai un énorme souci depuis plus d'une semaine de recherche (google notre meilleur ami). Voici mon probleme:
    J'ai une fenetre JFrame qui a plusieurs boutons pour divers utilité. quand on clique sur ouvrir cela ouvre une fenetre de type Shell. Mais je n'arrive pas à faire de sorte qu'on puisse en ouvrir plusieurs en meme temps.

    Comme par exemple un outils de dessin , de texte faire plusieur fois news...
    J'ai tout essayer un thread , runnable etc..erreur souvent de thread access control, fenetre principal pas active ou shell pas active ...
    Comment peut t'on faire pour tout simplement ouvrir plusieurs shell en même temps?
    SVP

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu commencais par nous montrer le code que tu utiliser pour "ouvrir un shell" ?

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut
    Sa serai mieux en effet

    Voici la classe qui est appeler par un bouton se trouvant dans une autre fenetre de type JFrame:

    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
    public class ImageCenter {
        private Shell shell = null;
        private Display display = null;
        private MyThreadWindows mm = null;
        private Composite panel = null;
     
        public ImageCenter () {
            init();
            mm = new MyThreadWindows(panel);
            mm.start();
        }
     
        public void init (){
            display = new Display ();
            shell = new Shell (display);
            shell.setSize(818, 644);
            shell.setLocation(200, position);
            RowLayout rr = new RowLayout();
            rr.pack = false;
            rr.center = true;
     
            shell.setLayout(rr);
            panel = new Composite (shell, SWT.BORDER);
        }
    }
    et voici la classe MyThread:
    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
    public class MyThreadWindows  extends Thread {
        private Composite cp;
     
        public MyThreadWindows (Composite cp) {
            this.cp = cp;
        }
     
        public void run () {
                          cp.getShell().open();
    		          while (!(cp.getShell().isDisposed ())) {
                        if (!(cp.getDisplay().readAndDispatch ()))
                            cp.getDisplay().sleep ();
                        }
                    cp.getDisplay().dispose ();
    		          }
    }

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu pourrais nous donner le code des classes shell, display et composite, la manière ton tu appelle "ImageCenter" pour créer tes nouveaux shell et nous décrire ce qui ne marche pas? (Tu clique sur le bouton ca fait rien, l'interface se givre, le bouton disparait, .... ?)

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut
    Jte refais un apply tt simple pour bien te cibler le probleme

    Voici ma classe principale, c'est une fenetre jframe contenant un panel et un bouton qui a son appel, crée un fenetre shell:
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    /*
     * NewJFrame1.java
     *
     * Created on 6 avr. 2009, 20:16:28
     */
     
    package IHM;
     
    /**
     *
     * @author drinou06
     */
    public class NewJFrame1 extends javax.swing.JFrame {
     
        /** Creates new form NewJFrame1 */
        public NewJFrame1() {
            initComponents();
        }
     
        private void initComponents() {
     
            jPanel1 = new javax.swing.JPanel();
            jButton1 = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            jButton1.setText("jButton1");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
     
            javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                    .addContainerGap(27, Short.MAX_VALUE)
                    .addComponent(jButton1))
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGap(39, 39, 39)
                    .addComponent(jButton1)
                    .addContainerGap(38, Short.MAX_VALUE))
            );
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            );
     
            pack();
        }// </editor-fold>
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
            MyShell msh = new MyShell();
        }
     
        /**
        * @param args the command line arguments
        */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame1().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify
        private javax.swing.JButton jButton1;
        private javax.swing.JPanel jPanel1;
        // End of variables declaration
     
    }
    ensuite voici ma classe qui créer un shell
    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
    public class MyShell {
     
        private Display dp = null;
        private Shell sh = null;
        private Composite panel = null;
        private MyThreadWindows mm;
     
        public MyShell () {
                   init();
            mm = new MyThreadWindows(panel);
            mm.start();
        }
     
        public void init (){
            dp = new Display ();
            sh = new Shell (dp);
            RowLayout rr = new RowLayout();
            rr.pack = false;
            rr.center = true;
            sh.setLayout(rr);
            panel = new Composite (sh, SWT.BORDER);
        }
    }
    et voici la classe du thread:

    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
    public class MyThreadWindows  extends Thread {
        private Composite cp;
     
        public MyThreadWindows (Composite cp) {
            this.cp = cp;
        }
     
        public void run () {
                          cp.getShell().open();
    		          while (!(cp.getShell().isDisposed ())) {
                        if (!(cp.getDisplay().readAndDispatch ()))
                            cp.getDisplay().sleep ();
                        }
                    cp.getDisplay().dispose ();
    		          }
    }
    J'ai bo tt essayer j'ai:
    -soit thread access control violation (un truc comme sa)
    -soit la JFramme frisse
    -Soit la fentre shell s'ouvre pas
    etc
    jamais jarrive a avoir une fenetre jframe qui ouvre pleinne de fentre shell avec aucun acces control violation etc

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    donne nous les erreur exactes (stacktrace) ainsi que, comme demandé, le code de shell est display, puisque ce sont ces classes qui ont l'air de faire le principal boulot

  7. #7
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 11
    Par défaut
    Je vois pas trop de quoi tu me demande quand tu parle de classe shell ....


    C'est tout simplement, une classe de java quand tu créer une interface graphique ... Je t'ai mis toute les classes. J'ai une fenetre JFrame (fait par la classe newsJFrame) qui contient un bouton et quand on clique desus cela créer une fenetre Shell avec un Display (fait par la classe MyShell) et voila.
    L'erreur c'est soit elle se lance pas la fenetre shell, soit j'ai violation thread access control
    voila

Discussions similaires

  1. freezes dans le shell avec thread python
    Par OttisToole dans le forum Général Python
    Réponses: 0
    Dernier message: 10/06/2009, 10h16
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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