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

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 W     W  ZZZZZ  DDD   BBBB       J 
W W Z D D B B J
W W W Z D D BBBB J
W W W Z D D B B J J
W W ZZZZZ DDD BBBB JJJ