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

Langage Java Discussion :

Problème de synchronisation ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut Problème de synchronisation ?
    Bonjour,
    j'ai créé un composant Multiclasseur utilisant des JTabbedPane.
    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
    100
     
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTabbedPane;
    import javax.swing.SwingConstants;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
     
    /**
     * une classe pour représenter un ensemble de classeurs comportant chacun plusieurs feuilles.
     * C'est un JTabbedPane contenant des classeurs (JTabbedPane)
     * Les onglets donnant les noms des classeurs est en bas du composant.
     */
    public class MultiClasseurs extends JTabbedPane implements ChangeListener
    {
     
    	/**
             * un constructeur avec une liste de noms d'onglets
             * @param onglets 
             */
    	public MultiClasseurs(String onglets[])
    	{
    		super(SwingConstants.BOTTOM);
    		for (String s : onglets)
    		{
    			String[] classeurs = s.split("/");
    			String nomClasseur = classeurs[0];
    			String nomsFeuilles = classeurs[1];
    			Classeur classeur = new Classeur(nomsFeuilles);
    			classeur.setVisible(nomClasseur.equals("Procédures"));
    			this.addTab(nomClasseur, classeur);
    		}
    		this.addChangeListener(this);
    	}
     
    	public JPanel composantAt(int ongletClasseur, int ongletFeuille) 
    	{
    		if (ongletClasseur >= this.getTabCount()) return null;
    		else
    		{
    			JTabbedPane classeur = (JTabbedPane) this.getTabComponentAt(ongletClasseur);
    			if (ongletFeuille >= classeur.getTabCount()) return null;
    			else return (JPanel) classeur.getTabComponentAt(ongletFeuille);
    		}
    	}
     
    	public JPanel feuille(String nomClasseur, String nomFeuille)
    	{
    		for(int i = 0 ; i < this.getTabCount() ; i++)
    		{
    			System.out.println(this.getTitleAt(i));
    			if (this.getTitleAt(i).equals(nomClasseur))
    			{
    				Classeur classeur = (Classeur) this.getTabComponentAt(i);
    				System.out.println(classeur);
    				for (int j = 0 ; j < classeur.getTabCount() ; j++)
    				{
    					System.out.println(classeur.titreTab(j));
    					if (classeur.titreTab(j).equals(nomFeuille))
    					return (JPanel) classeur.getTabComponentAt(j);
    				}
    				return null;
    			}
    		}
    		return null;
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args)
    	{
    		JFrame fenetre = new JFrame("essai de multi classeurs");
    		fenetre.setExtendedState (Frame.MAXIMIZED_BOTH) ;
    		fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fenetre.setVisible(true);
     
            String ongletsEnChaine = "Procédures/programmes;étude;valeurs\ninutilisées;problème\ninfos;contrôles;constantes:" +
            				         "Territoires/territoires;nom des\npays;nom des\ncivilisations:" +
            				         "Graphiques/graphique;travail;points;ellipse:" +
            				         "Pourtours/limes;liste de\nlimes;optimiser\nliste:" +
            				         "Points/points;points à\nsauver:" +
            				         "Etude pays/étude\npays:" +
            				         "Infos territoires/infos\nterritoires:" +
            				         "Atlas/atlas:" +
            				         "Calculs des points/calcul des\npoints;un sur\ndeux;intersection";
            String onglets[] = ongletsEnChaine.split(":");
            MultiClasseurs multiClasseurs = new MultiClasseurs(onglets);
            fenetre.getContentPane().add(multiClasseurs);
            multiClasseurs.composantAt(0, 0).add(new FeuilleProgrammes());        
     
    	}
     
    	public void stateChanged(ChangeEvent e)
    	{
    		JOptionPane.showMessageDialog(null, "on a cliqué sur l'onglet " + getTitleAt(this.getSelectedIndex()));
     
    	}
    }
    en exécutant j'ai l'erreur suivante
    Exception in thread "main" java.lang.NullPointerException
    at ihm.MultiClasseurs.composantAt(MultiClasseurs.java:43)
    at ihm.MultiClasseurs.main(MultiClasseurs.java:91)

    C'est à dire que tout se passe comme si le classeur n'avait pas eu le temps de s'initialiser.
    D'où ma question comment attendre que tous les classeurs aient été créés avant d'accéder au multiClasseur.

    Merci.

  2. #2
    Membre très actif Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Par défaut
    afficher ta fenêtre en dernier dans ton main.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par supergeoffrey Voir le message
    afficher ta fenêtre en dernier dans ton main.
    En effet je vais essayer.
    Mais en fait j'ai trouvé en farfouillant, il existe deux méthodes pour le JtabbedPane
    getComponentAt et getTabComponentAt. Il semble qu'il faille utiliser le premier.

    Merci cependant de ta réponse (ta remarque ne peut qu'améliorer la situation).

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Ne serait-ce pas sur cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (ongletFeuille >= classeur.getTabCount()) return null;
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par Patrice Henrio Voir le message
    En effet je vais essayer.
    Mais en fait j'ai trouvé en farfouillant, il existe deux méthodes pour le JtabbedPane
    getComponentAt et getTabComponentAt. Il semble qu'il faille utiliser le premier.

    Merci cependant de ta réponse (ta remarque ne peut qu'améliorer la situation).
    ça marche maintenant. C'était bien l'histoire du getTabComponentAt et getComponentAt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de synchronisation de thread
    Par youp_db dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/10/2006, 11h34
  2. [VB.net] Problème de synchronisation d'une base
    Par WriteLN dans le forum Windows Forms
    Réponses: 18
    Dernier message: 21/10/2005, 13h11
  3. Problème de synchronisation...
    Par sankookai dans le forum MFC
    Réponses: 10
    Dernier message: 16/02/2005, 14h03
  4. [C#] Problème de synchronisation de combobox
    Par WwiloO dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/12/2004, 19h56
  5. Problème de synchronisation dans un JTextArea
    Par wutang dans le forum Composants
    Réponses: 3
    Dernier message: 21/06/2004, 15h06

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