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 :

TestCase de bug java 6


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut TestCase de bug java 6
    Suite à une exception qui est levée, mais qui ne perturbe pas l'application, j'ai fait un bug report...

    Après avoir cherché, j'ai isolé un TestCase qui permet de mettre en évidence le bug...

    Apparemment, le bug n'apparait que sur java 6 beta, et ce test fonctionnerait sur java 5... (le bug similaire de mon appli fonctionnait sur java5)

    Je souhaiterais que qqn le teste sous java 5 svp (je n'ai pas envie de l'installer, pr éviter d'éventuels conflits avec java6).

    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
    package bug779907;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTabbedPane;
    import javax.swing.SwingUtilities;
     
    /**
     * TestCase for JAVA SE6 BUG ID 779907.
     * 
     * @author rom1v
     */
    public class BugTestCase {
     
        public static void main(String... args) {
            SwingUtilities.invokeLater(new Runnable() {
     
                public void run() {
                    JFrame frame = new JFrame();
                    frame.setBounds(100, 100, 300, 300);
                    final JTabbedPane tabbedPane = new JTabbedPane();
                    frame.getContentPane().add(tabbedPane);
     
                    /* It's a particular case, but I think it should work correctly. */
                    new Thread() {
     
                        @Override public void run() {
                            SwingUtilities.invokeLater(new Runnable() {
     
                                public void run() {
                                    tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1, new JLabel("tab"));
                                    tabbedPane.setSelectedIndex(0);
                                }
                            });
                        }
                    }.start();
                    frame.setVisible(true);
                }
            });
        }
     
    }
    L'exception levée (souvent, mais pas tout le temps):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
        at java.util.Vector.elementAt(Unknown Source)
        at javax.swing.JTabbedPane.getTabComponentAt(Unknown Source)
        at javax.swing.JTabbedPane.setTabComponentAt(Unknown Source)
        at bug779907.BugTestCase$1$1$1.run(BugTestCase.java:31)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Le TestCase est faux... (j'ai oublié un add)
    Mais dans mon application, un bug similaire apparait, et ça ne vient pas d'un oubli de add() :
    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
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
        at javax.swing.plaf.basic.BasicTabbedPaneUI$ScrollableTabSupport.updateView(Unknown Source)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$ScrollableTabSupport.stateChanged(Unknown Source)
        at javax.swing.JViewport.fireStateChanged(Unknown Source)
        at javax.swing.JViewport$ViewListener.componentResized(Unknown Source)
        at java.awt.Component.processComponentEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

  3. #3
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a un autre problème qui fait que cela ne pourra pas marcher sous Java 5.0 : la méthode setTabComponentAt() n'est apparut que dans Java 6

    a++

    PS : Je te conseille de developpez avec le version minimum de Java pour laquelle ton application est destiné.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Il y a un autre problème qui fait que cela ne pourra pas marcher sous Java 5.0 : la méthode setTabComponentAt() n'est apparut que dans Java 6

    a++

    PS : Je te conseille de developpez avec le version minimum de Java pour laquelle ton application est destiné.
    La version minimum pour laquelle mon appli est destinée est java 6.0 (mon appli sortira après la sortie de java 6)

    C'était pour voir si le bug rencontré venait de java6 ou existait déjà avant... Apparemment il est apparu entre java6-rc-b86 et java6-rc-b96...

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ®om
    La version minimum pour laquelle mon appli est destinée est java 6.0 (mon appli sortira après la sortie de java 6)

    C'était pour voir si le bug rencontré venait de java6 ou existait déjà avant... Apparemment il est apparu entre java6-rc-b86 et java6-rc-b96...
    Ok je comprend mieux

    Pourquoi créer un thread pour seulement appeller invokeLater() ? C'est un peu inutile (mais je pense que c'est pour mieux reprendre les conditions de l'erreur).


    Sinon je vois un problème : Tu n'utilises pas invokeLater() pour afficher le composant.
    Du coup dans certain cas tu peux te retrouver à modifier ton composant dans l'EDT via setTabComponentAt() et setSelectedIndex(), et dans le même temps à initialiser ton composants pour l'affichage via setVisible(true).

    Du coup tu modifies le même composants depuis deux threads différents --> possibilité de bug aléatoire !


    Essaye de mettre le setVisible() dans l'EDT pour voir si le problème se reproduit

    a++

    PS : j'ai déplacé dans le forum GUI plus approprié

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    setVisible(true) est déjà dans l'EDT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {
    (bah oui on fait des trucs bizarres pour isoler les bugs^^)

    Citation Envoyé par adiGuba
    Pourquoi créer un thread pour seulement appeller invokeLater() ? C'est un peu inutile (mais je pense que c'est pour mieux reprendre les conditions de l'erreur).
    Exactement

    Dans l'appli réelle, c'est un Executor qui effectue des tâches, et à la fin fait un invokeLater();

    EDIT: apparemment, même pour ceux qui ont JAVA 6, même version beta, ils n'arrivent pas à reproduire mon bug sur mon appli... Ca n'arrive que chez moi...

Discussions similaires

  1. Bug Java UAC + Eclipse
    Par atha2 dans le forum Eclipse
    Réponses: 1
    Dernier message: 26/04/2011, 19h37
  2. selenium RC lancer un testcase sauvegardé en .java
    Par meteteou dans le forum Test
    Réponses: 1
    Dernier message: 02/04/2008, 11h15
  3. [bug] java 1.6 JFrame
    Par soad dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 18/04/2006, 23h05
  4. [JDialog] Icône d'une JDialog (bug Java or not ?)
    Par Oliveuh dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 22/07/2005, 12h03
  5. [PROPERTIES] Bug dans java.util.Properties ?
    Par mathieu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/04/2004, 15h11

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