Ajouter un commentaire

Niroken

Hello

J'ai donc regardé ton code et j'ai trouvé/résolu les erreurs.

Pour la majorité il y a bcp de confusion entre variables locales et membres d'une classe.

Je prend un exemple :

Ta classe MaFenetre déclare un membre

ToutesLesVilles maroc

Or dans ton constructeur MaFenetre tu redéclares maroc comme ceci :

ToutesLesVilles maroc=new  ToutesLesVilles(); 

La bonne solution est de faire :

maroc=new  ToutesLesVilles(); 

Conclusion dans ton cas : le membre maroc de Mafenetre ne sera jamais initialisé et restera à null.

Ce qui est plutot facheux pour la suite puisque quand tu changes un item
de ton combobox tu fais appel a ce bout de code :

pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 

maroc n'étant pas initialisé bim : nullPointerException

J'ai relevé les mêmes problèmes dans ta classe ToutesLesVilles avec les membres nb et tville.

Après il y a une autre "astuce" dans ton code : tu ajoutes le listener du combobox qui sélectionne les villes avant de déclarer la variable pcentre,
du coup a l'initialisation pcentre n'est pas initialisé et le code :

pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 

va péter une nullPointerException puisque pcentre est null.

Dans ce cas : c est crasseux mais ce n'est pas dramatique puisque cette erreur ne survient qu'une fois, la bonne solution consiste a déplacer l'init
de pcentre avant l'ajout du listener du combobox

Et pour finir je te poste ici les deux fichiers que j'ai corrigé :

import java.awt.Point; 
import java.awt.Rectangle; 
import java.util.*; //pour StringTokenizer 
  
public class ToutesLesVilles{ 
      private String nom; 
        private int nb,code, longitude,latitude; 
        private Ville[] tville; 
        private Ville ville; 
        private Route[] routes; 

  
        
        public  Ville[] charger(String fichier){ 
                
                
                
                FileTableau ft= new FileTableau(fichier);//chargement du fichier en créant un FileTableau 
                nb=ft.getSize(); 
                System.out.println("nombre de ville dans le fichier ville.txt: "+nb); 
                
                tville= new Ville[nb];//déclaration d'un tableau contenant des objets ville 
                
                
                
                for(int i=0;i<nb;i++) 
                { 
                        String lignelue= ft.getLine(i); 
  
                        StringTokenizer st= new StringTokenizer(lignelue,";"); 
                        while (st.hasMoreTokens()) { 
                        nom=st.nextToken(); 
                        code=Integer.parseInt(st.nextToken()); 
                        longitude=Integer.parseInt(st.nextToken()); 
                        latitude=Integer.parseInt(st.nextToken()); 
                        
                                tville[i]= new Ville(nom,code,longitude,latitude); 
                            
                            
                                                  
                         } 
                        
                } 
  
                return tville; 
        } 
        
        public Ville[] getTville() {
			return tville;
		}

		public void chargerRoute(String fichier){ 
           FileTableau ft = new FileTableau(fichier); 
           Route[] routes = new Route[ft.getSize()]; 
           int r = 0; 
           for (int i = 0; i < ft.getSize(); i++) 
           { 
                    String lignelue = ft.getLine(i); 
                     
                      StringTokenizer st = new StringTokenizer(lignelue, ";"); 
                      int villeA = Integer.parseInt(st.nextToken()); 
                      int villeB = Integer.parseInt(st.nextToken()); 
                       int distance = Integer.parseInt(st.nextToken()); 
                      System.out.println((1 + i) + "/" + ft.getSize()); 
                      Ville vilA = null; 
                      Ville vilB = null; 
                      int j = 0; 
                      while ((vilA == null || vilB == null) && j < tville.length) 
                      { 
                           if (tville[j].getCode() == villeA) 
                           { 
                               vilA = tville[j]; 
                      } 
                           else if (tville[j].getCode() == villeB) 
                           { 
                                vilB = tville[j]; 
                           } 
                           j++; 
                      } 
           } 
            
        } 
        
        public Ville getVilleParNom(String nomVille){ 
                 int i = 0; 
                    boolean trouve = false; 
                    while(! trouve && i < nb) { 
                      if (tville[i].getNom().equalsIgnoreCase(nomVille)) 
                      return new Ville(tville[i].getNom(),tville[i].getCode(),tville[i].getLongitude(),tville[i].getLatitude()); 
                      else 
                          i++; 
                    } 
                
                    return null; 
        } 
        
        public Ville getVilleParPosition(int x, int y) 
        { 
               for (int i = 0; i < tville.length; i++) 
               { 
                   Rectangle rec = new Rectangle(tville[i].getLatitude(),tville[i].getLongitude(),4,4); 
                                   if (rec.contains(new Point(x,y))) 
                                           return tville[i]; 
              }  
                           return null; 
         } 



        
}


import java.io.*; 
import java.util.*; 

import java.awt.*; 
import java.awt.event.*; 


import javax.swing.*; 
import javax.swing.event.*; 

public class Mafenetre extends JFrame implements ActionListener, ItemListener{ 
   //la barre de menus 
   JMenuBar br = new JMenuBar(); 
     
    
   // Déclaration des menus 
   JMenu F = new JMenu("Fichier"); 
   JMenu E = new JMenu("Help"); 
   JMenu A = new JMenu("Affichage"); 
    
   //Declarations des items de menus 
    
   JMenuItem A_C = new JMenuItem("Afficher les informations d une ville"); 
   JMenuItem Q   = new JMenuItem("Quitter"); 
   JMenuItem C_A = new JMenuItem("Centre d aide"); 
   JMenuItem A_P = new JMenuItem("A propos du logiciel"); 
   JMenuItem C_C = new JMenuItem("Couleur de fond"); 
    
   //déclaration de panels 
   private Carte pcentre; 
   JPanel pest    = new JPanel(); 
   JPanel pestn   = new JPanel(); 
   JPanel pestc   = new JPanel(); 
   JPanel psud    = new JPanel(); 
   JPanel pnord   = new JPanel(); 
   JPanel pnord1  = new JPanel(); 
             
    
   JComboBox cb = new JComboBox(); 
   JComboBox cc = new JComboBox(); 
   public static final String[] nomcombo = {"dont le nom est","dont le code postale est"}; 
   JComboBox crech = new JComboBox(nomcombo); 
    
    
   JLabel lvdep = new JLabel("Ville de départ"); 
   JLabel lvar  = new JLabel("Ville d'arrivée"); 
   JLabel lval  = new JLabel("Valider"); 
   JLabel ldist = new JLabel("Distance    :"); 
   JLabel ltemp = new JLabel("Temps       :"); 
   JLabel lvp   = new JLabel("Ville Proche:"); 
   JLabel lrech = new JLabel("Recherche d'une ville"); 
   JLabel nomv  = new JLabel("Nom ville"); 
   JLabel cdp   = new JLabel("Code postal"); 
    
    
   JTextField trech = new JTextField(20); 
   JTextField ldistr= new JTextField(10); 
   JTextField ltempr= new JTextField(10); 
   JTextField nomvr = new JTextField(10); 
   JTextField cdpr  = new JTextField(10);    
    
    
   //JButton rech = new JButton("rechercher");    
   JButton bok   = new JButton("OK"); 
   JButton brech = new JButton("Rechercher"); 
    
   private Ville[] t; 
   private ToutesLesVilles maroc; 
    
   public Mafenetre() 
      { 
         //Parametre de la fenetre, titre, taille, dimension 
          
         this.setTitle("Réalisation d'un Maroc Routier"); 
         this.setSize(1024,768); 
         this.setLayout(new BorderLayout(15,10)); 
          
         ldistr.setEditable(false); 
         ltempr.setEditable(false); 
         //nomvr.setEditable(false); 
         //cdpr.setEditable(false); 
          
         maroc=new  ToutesLesVilles(); 
         t=maroc.charger("C:/MyAtlas/Villes.txt"); 
         for(int i=0; i < t.length; i++) 
            { 
            try{ 
            cb.addItem(t[i].getNom()); 
            cc.addItem(t[i].getNom()); 
               } 
            catch(Exception a) 
            { } 
            } 
         pcentre = new Carte(maroc); 
         
         
         
         //Ecouteur sur  le combobox 
         cb.addItemListener(this); 
       
          
         //Ecouteur pour sortir de l application 
         Q.addActionListener(this); 
          
         //Ecouteur dans le menu affichage 
         C_C.addActionListener(this); 
         C_C.setToolTipText("Changer la couleur de fond"); 
          
         //Ecouteur sur le menu afficher les infos d une ville 
         A_C.addActionListener(this); 
          
         //ecouteur sur A_P 
         A_P.addActionListener(this);          
          
          
         //Ajout des items sur le menu fichier 
          
         F.add(A_C); 
         F.add(Q); 
          
         //Ajout des items sur le menu aide 
         E.add(C_A); 
         E.add(A_P); 
          
         //Ajout d un item sur le menu affichage 
         A.add(C_C); 
          
          
          
         //Ajout des menus : fichier et help sur la barre de menus 
         br.add(F); 
         br.add(A); 
         br.add(E); 
          
          
         //mettre la barre de menus sur la frame 
         this.setJMenuBar(br); 
          
          
          
         //Proprieté de la frame une qui va contenir la carte 
         //pcentre.setBackground(Color.red); 
         
       
                         
                   
         //Proprietés de la frame trois qui va contenir nos 2 labels avec les noms des réalisateurs et de l encadrant 
         psud.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Choix")); 
         psud.setLayout(new BoxLayout(psud,BoxLayout.X_AXIS)); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(lvdep); 
         psud.add(Box.createHorizontalStrut(10)); 
         psud.add(cb); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(lvar); 
         psud.add(Box.createHorizontalStrut(10)); 
         psud.add(cc); 
         psud.add(Box.createHorizontalStrut(20)); 
         psud.add(bok); 
          
         //panel nord 
         pnord.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Rechercher une ville")); 
         pnord.setLayout(new BorderLayout()); 
          
         pnord.add(pnord1, BorderLayout.CENTER); 
         pnord.setToolTipText("Rechercher une ville sur la carte"); 
          
          
         //panel nord 1 qui contient la zone de recherche 
          
         //pnord1.setLayout(new BoxLayout(pnord1,BoxLayout.X_AXIS)); 
         pnord1.add(lrech); 
          pnord1.add(Box.createHorizontalStrut(1)); 
         pnord1.add(crech); 
         pnord1.add(trech); 
         pnord1.add(brech); 
          
       
         //panel est 
         pest.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Resultat")); 
         pest.setLayout(new BorderLayout()); 
          
         //panel est nord 
         pestn.setLayout(new GridBagLayout()); 
         GridBagConstraints gbc = new GridBagConstraints(); 
         gbc.gridx = gbc.gridy = 0; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ldist, gbc); 
          
         gbc.gridx =1; 
         gbc.gridy =0; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ldistr, gbc); 
          
          
         gbc.gridx = 0; 
         gbc.gridy = 1; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ltemp, gbc); 
          
          
         gbc.gridx = 1; 
         gbc.gridy = 1; 
         gbc.gridwidth = 1; 
         gbc.gridheight = 1; 
         gbc.weightx = 0; 
         gbc.weighty = 0; 
         gbc.insets = new Insets(10, 15, 0, 0); 
         pestn.add(ltempr, gbc); 
          
         //panel est centre 
         pestc.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Infos sur ville")); 
         pestc.setLayout(new GridBagLayout()); 
         GridBagConstraints gbcd = new GridBagConstraints(); 
         gbcd.gridx = gbc.gridy = 0; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(nomv, gbcd); 
          
         gbcd.gridx =1; 
         gbcd.gridy =0; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(nomvr, gbcd); 
          
          
         gbcd.gridx = 0; 
         gbcd.gridy = 1; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(cdp, gbcd); 
          
          
         gbcd.gridx = 1; 
         gbcd.gridy = 1; 
         gbcd.gridwidth = 1; 
         gbcd.gridheight = 1; 
         gbcd.weightx = 0; 
         gbcd.weighty = 0; 
         gbcd.insets = new Insets(10, 15, 0, 0); 
         pestc.add(cdpr, gbcd); 
          
          
       
         pest.add(pestn, BorderLayout.NORTH); 
         pest.add(pestc, BorderLayout.CENTER); 
          
          
         //Ajouter nos panels sur la frame 
         this.add(pcentre,BorderLayout.CENTER); 
         this.add(pest,BorderLayout.EAST); 
         this.add(psud,BorderLayout.SOUTH); 
         this.add(pnord,BorderLayout.NORTH); 
       

} 

   public void itemStateChanged(ItemEvent e){ 
      if(e.getStateChange() == ItemEvent.SELECTED){ 
         String texte = (String)cb.getSelectedItem(); 
      try{    
         pcentre.setVilleSelectionnee(maroc.getVilleParNom(texte)); 
         pcentre.updateUI(); 
      } 
      catch(Exception e1){ 
         e1.printStackTrace(); 
      } 
      }} 
    
   public void actionPerformed(ActionEvent argo) { 
      //Object source = argo.getSource(); 
      //int source = JFrame.EXIT_ON_CLOSE; 
                   
      if(argo.getSource() == Q) 
         { 
            int result = JOptionPane.showConfirmDialog(pcentre,"Voulez vous vraiment quittez l application","Quitter application",JOptionPane.YES_NO_OPTION); 
            if(result == JOptionPane.YES_OPTION) System.exit(0); 
         } 
    
      if(argo.getSource() == C_C) 
      { 
         Color color = JColorChooser.showDialog(this,"Choix d'une couleur",Color.RED); 
         pnord1.setBackground(color); 
         pnord.setBackground(color); 
         psud.setBackground(color); 
         pest.setBackground(color); 
         pestn.setBackground(color); 
         pestc.setBackground(color); 
          
          
      } 
    
      if(argo.getSource() == A_C) 
         { 
            String string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ; 
            int rep = 0; 
            if( string != null) 
               { 
                  //System.out.println ("vous avez tapez:"+ string); 
                  for(int i=0; i<t.length; i++){ 
                     if(t[i].getNom().equalsIgnoreCase(string)){ 
                        System.out.println ("vous avez tapez:"+ string); 
                        System.out.println(+ t[i].getCode()); 
                        nomvr.setText(t[i].getNom()); 
                        //cdpr.setText(String(t[i].getCode())); 
                     } 
               /*      if (t[i].getNom() != string){ 
                        JOptionPane.showMessageDialog(this, "Entrer une ville"); 
                        string = JOptionPane.showInputDialog(null, "Entrez le nom de la ville") ; 
                        }*/ 
                  } 
                   
                   
               } 
            } 
          
      if(argo.getSource() == brech) 
         { 
            for(int i = 0; i<t.length;i++){ 
            if(trech.getText().equals(t[i].getNom())) 
            System.out.println("vous avez choisi"+ trech.getText());} 
         } 
    
    

          
       
   } 

    
    
    
    
} 

Tu n'auras qua remettre correctement les chemins des fichiers "villes" et "routes"

Bonne chance,
Niroken

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  GGG   X   X  DDD   TTTTTT  X   X 
G X X D D TT X X
G GG X D D TT X
G G X X D D TT X X
GGG X X DDD TT X X