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 :

[SWT] Freeze IHM avec le composant Tree


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement Java/Web
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement Java/Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut [SWT] Freeze IHM avec le composant Tree
    Salut,

    Mon application contient un Shell qui affiche un Tree. Lorsque j'étends la racine de Tree en cliquant sur "+" et puis j'essaie de la restreindre en cliquant sur "-", l'application se plante en affichant le mauvais message "(Ne répond pas)". Lorsque j'essaie de fermer l'application, Windows m'indique que "Java(TM) 2 Platforme Standard Edition binary ne répond pas".

    Est-ce que quelqu'un a une explication de ce problème et comment le résoudre?

    J'utilise: SWT 3.2.2, jre 1.5.0_14, eclipse SDK 3.2 et Windows Seven.

    Merci d'avance,

  2. #2
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Tu pourrais nous donner un peu plus d'infos? Tu pourrais nous donner le code d'affichage de ton Tree, le code de ton Shell (la boucle de dispatch par exemple)... Parce que c'est un peu mince là...

    Voilà, à+
    Gueritarish

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement Java/Web
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement Java/Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    C'est difficile de donner le code parcequ'il y a plusieurs classes qui agissent sur la création des noeuds de mon tree. Le problème se pose uniquement pour le noeud racine, les autres noeuds peuvent être étendus et restreints infiniment sans aucun problème.
    D'après vous, quelles sont les choses qui peuvent créer ce problème?
    Concernant la boucle de dispatch, si j'ai compris , c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (!shell.isDisposed())
          {
             if (!display.readAndDispatch())
                display.sleep();
          }

  4. #4
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Oui, c'est bon, ta boucle de dispatch est bonne...
    Par contre, sans connaître ce que tu affiches à la racine de ton Tree ni comment tu l'affiches, je peux pas grand chose pour toi .
    Tu peux t'aider des exemples d'implémentation donnés par Eclipse pour voir si tu déclares bien tes composants... Ça peut toujours être utile.

    Voilà, à+
    Gueritarish

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement Java/Web
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement Java/Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    Bon, voila le code simplifié
    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
     
          Display display = PlatformUI.getWorkbench().getDisplay();
          final Shell shell = new Shell(display, SWT.APPLICATION_MODAL
             | SWT.CLOSE
             | SWT.TITLE
             | SWT.MAX
             | SWT.RESIZE);
          shell.setText("shell");
          shell.setSize(700, 700);
          shell.setLayout(new GridLayout(2, true));
     
          TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
          tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
          TabItem item = new TabItem(tabFolder, SWT.NONE);
          item.setText(Util.METRICS_LABEL);
          Composite composite = new Composite(tabFolder, SWT.NONE);
          composite.setLayout(new GridLayout());
          item.setControl(composite);
    //création de tree
          Tree tree = new Tree(composite, SWT.BORDER);
          tree.setHeaderVisible(true);
          tree.setLinesVisible(true);
          tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
          TreeColumn column1 = new TreeColumn(tree, SWT.NONE);
          column1.setText("C1");
          TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
          column2.setText("C2");
          TreeColumn column3 = new TreeColumn(tree, SWT.NONE);
          column3.setText("C3");
          TreeColumn column4 = new TreeColumn(tree, SWT.NONE);
          column4.setText("C4");
          TreeColumn column5 = new TreeColumn(tree, SWT.NONE);
          column5.setText("C5");
          TreeColumn column6 = new TreeColumn(tree, SWT.NONE);
          column6.setText("C6");
    // la racine
          TreeItem racine= new TreeItem(tree, SWT.NONE);
          branch.setText("Racine");
    // 1er noeud sous la racine
          TreeItem wpitem = new TreeItem(racine, SWT.NONE);
          wpitem.setText("noeud1");
     
          for (/*parcour d'une liste d'objets*/)
          {/*
             Cette boucle crée un noeud sous la racine "racine" pour chaque objet.
          */
          }
     
          racine.setExpanded(true);
          column1.pack();
          column2.pack();
          column3.pack();
          column4.pack();
          column5.pack();
          column6.pack();
     
          Button rapport = new Button(composite, 0);
          rapport.setText("Générer un rapport");
     
          TabItem item2 = new TabItem(tabFolder, SWT.NONE);
          item2.setText("Configuration");
          Composite composite2 = new Composite(tabFolder, SWT.NONE);
          composite2.setLayout(new GridLayout(2, true));
          composite2.setBackground(new Color(null, 240, 240, 240));
          item2.setControl(composite2);
     
          Button fermer = new Button(shell, 1);
          fermer.setText("Fermer");
          fermer.pack(true);
          fermer.addSelectionListener(new SelectionAdapter()
          {
             @Override
             public void widgetSelected(SelectionEvent event)
             {
                shell.close();
             }
          });
     
          shell.setLocation(300, 100);
          shell.pack();
          shell.open();
          while (!shell.isDisposed())
          {
             if (!display.readAndDispatch())
                display.sleep();
          }
       }
    j'espère que ca vous donne une idée sur le code . Si non, c'est à cause de simplifications que j'ai faits .
    Merci Gueritarish de m'avoir donner un peu de votre temps .
    Que dieu soit avec vous

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement Java/Web
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement Java/Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    En supprimant la boucle "for" tout va bien. Donc il faut que je verifie ce que se passe dedans.

  7. #7
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    J'ai donc créé un main qui se base sur le code que tu m'as fourni:
    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
        /**
         * @param args the arguments of the main.
         */
        public static void main(final String[] args) {
            Display display = new Display();
            final Shell shell =
                new Shell(display, SWT.APPLICATION_MODAL | SWT.CLOSE | SWT.TITLE
                    | SWT.MAX | SWT.RESIZE);
            shell.setText("shell");
            shell.setSize(700, 700);
            shell.setLayout(new GridLayout(2, true));
     
            TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
            tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2,
                1));
            TabItem item = new TabItem(tabFolder, SWT.NONE);
            item.setText("item");
            Composite composite = new Composite(tabFolder, SWT.NONE);
            composite.setLayout(new GridLayout());
            item.setControl(composite);
            // création de tree
            Tree tree = new Tree(composite, SWT.BORDER);
            tree.setHeaderVisible(true);
            tree.setLinesVisible(true);
            tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
            TreeColumn column1 = new TreeColumn(tree, SWT.NONE);
            column1.setText("C1");
            TreeColumn column2 = new TreeColumn(tree, SWT.NONE);
            column2.setText("C2");
            TreeColumn column3 = new TreeColumn(tree, SWT.NONE);
            column3.setText("C3");
            TreeColumn column4 = new TreeColumn(tree, SWT.NONE);
            column4.setText("C4");
            TreeColumn column5 = new TreeColumn(tree, SWT.NONE);
            column5.setText("C5");
            TreeColumn column6 = new TreeColumn(tree, SWT.NONE);
            column6.setText("C6");
            // la racine
            TreeItem racine = new TreeItem(tree, SWT.NONE);
            racine.setText("Racine");
            racine.setExpanded(false);
            // noeuds sous la racine:
            TreeItem wpitem;
            for (int i = 0; i < 100; i++) {
                wpitem = new TreeItem(racine, SWT.NONE);
                wpitem.setText("Item " + (i + 1));
            }
     
            column1.pack();
            column2.pack();
            column3.pack();
            column4.pack();
            column5.pack();
            column6.pack();
     
            Button rapport = new Button(composite, 0);
            rapport.setText("Générer un rapport");
     
            TabItem item2 = new TabItem(tabFolder, SWT.NONE);
            item2.setText("Configuration");
            Composite composite2 = new Composite(tabFolder, SWT.NONE);
            composite2.setLayout(new GridLayout(2, true));
            composite2.setBackground(display.getSystemColor(SWT.COLOR_GRAY));
            item2.setControl(composite2);
     
            Button fermer = new Button(shell, 1);
            fermer.setText("Fermer");
            fermer.pack(true);
            fermer.addSelectionListener(new SelectionAdapter() {
     
                @Override
                public void widgetSelected(final SelectionEvent event) {
                    shell.close();
                }
            });
     
            shell.setLocation(300, 100);
            shell.pack();
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch()) {
                    display.sleep();
                }
            }
            display.dispose;
        }
    Et tout marche très bien... Cela peut donc être dû à ton remplissage de l'arbre...
    Au passage, à la place de faire des new Color essaye d'utiliser celle qui sont déjà définies dans le Display (regarde pour le Composite 2). Sinon, si tu crées des nouvelles instances de la classe Color tu dois les libérer en faisant un dispose explicitement !!!

    Voilà, à+
    Gueritarish

    [EDIT] C'est bien dû à ton remplissage alors ^^
    N'hésite pas à le poster ici pour voir ce qui cloche...

Discussions similaires

  1. E-mail de l'expéditeur avec le composant serveur Outlook
    Par DavFau dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 19/01/2008, 10h09
  2. [SWT]comptabilité entre SWT et Swing : avec eclipse
    Par lawale125 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 12/01/2007, 10h58
  3. Problème avec composant Tree
    Par jekif dans le forum Flash
    Réponses: 3
    Dernier message: 17/11/2006, 15h44
  4. Impression avec le composant TRvSystem
    Par tarbala dans le forum Composants VCL
    Réponses: 3
    Dernier message: 02/10/2004, 17h03
  5. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58

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