[Java] Bizarerie du MouseListener

Bizarerie du MouseListener [Java] - Java - Programmation

Marsh Posté le 21-02-2003 à 15:46:48    

Lut a tous...
 
voila, mon probleme:
J'ai créé une interface graphique qui ouvrent plusieurs fenetres(6 en tout)
 
2 de ces fenetres implementent l'interface MouseListener
 
la premiere fonctionne parfaitement (pour les 2, j'ai juste besoin du MouseClicked) mais l'autre me revoie une NullPointerException au moindre clic:
 
java.lang.NullPointerException
        at CDebugFrame.mouseClicked(CDebugFrame.java:64)
        ....
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

 
le probleme vient il du fait qu'on a pas le droit de faire 2 implements du MouseListener?
 
(ce sont des mouselistener sur des JList)

Reply

Marsh Posté le 21-02-2003 à 15:46:48   

Reply

Marsh Posté le 21-02-2003 à 16:01:08    

Absolument pas.
 
Mais si tu nous postais le code de ta classe CDebugFrame autour de la ligne 64, on devrait pouvoir t'aider un peu plus.

Reply

Marsh Posté le 21-02-2003 à 16:06:18    

ici le code de création de la JList:

Code :
  1. body = new JList(bodyV = loadInfoFromDebugXML());
  2. body.addMouseListener(this);


 
Voila, le code ligne 64:
 

Code :
  1. public void mouseClicked(MouseEvent e)
  2. 64->   {
  3.       if (!(body.isSelectionEmpty()))
  4.       {
  5.          int index = body.getSelectedIndex();
  6.          envDisp.currentInstr=index;
  7.          envDisp.setMainListVector();
  8.       }
  9.    }
  10.  
  11.    public void mouseEntered(MouseEvent e) {}
  12.    public void mouseExited(MouseEvent e) {}
  13.    public void mousePressed(MouseEvent e) {}
  14.    public void mouseReleased(MouseEvent e) {}


 
si c'etait un pb de { }, ca compilerait pas...surtout que l'autre MouseListener fonctionne (il a la meme gueule)

Reply

Marsh Posté le 21-02-2003 à 16:29:35    

Tu es sûr que bodyV n'est pas nul ?
Si ce n'est pas le cas, je vais devoir te demander de m'envoyer ton code, parce que comme ça, je ne vois pas...  :??:

Reply

Marsh Posté le 21-02-2003 à 16:36:29    

malheureusement non, bodyV, il est pas "null", sinon, il n'y aurait rien dans ma JList...hors la, elle affiche tout un tas de truc (enfin, elle contient ce qu'elle doit contenir)
 
j'ai pensé a autre chose, la derniere ligne du truc d'erreur, c'est un plantus du run d'un thread, j'aurais atteind le maximum de thread possible?

Reply

Marsh Posté le 21-02-2003 à 17:14:53    

Ca m'étonnerait. Mais comme je te dis, là, je n'ai aucune idée, alors il faudrait que je voie le code.

Reply

Marsh Posté le 21-02-2003 à 17:19:03    

c'est plutot conséquent...
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. import oracle.xml.parser.v2.*;
  5. import java.io.*;
  6. import java.util.*;
  7. import org.w3c.dom.*;
  8. public class CDebugFrame extends JFrame implements ActionListener,WindowListener,MouseListener
  9. {
  10.    protected XMLDocument               xd;
  11.    protected XMLDocument               xmlOutDoc;
  12.    protected XMLElement                xmlOut;
  13.  
  14.    protected FileInputStream           fd;
  15.    protected DOMParser                 parser;
  16.  
  17.    protected JList                     bodyL;
  18.    protected Vector                    bodyV;
  19.    protected JScrollPane               scrollList;
  20.  
  21.    protected JLabel                    nfoLabel;
  22.  
  23.    protected CEnvDisplay               envDisp;
  24.  
  25.    protected String                    fXML;
  26.  
  27.    protected FileOutputStream          outFile;
  28.  
  29.    protected String                    lastOpenPath;
  30.  
  31.    // Bouttons sud
  32.    private   JButton                   showXMLB;
  33.    private   JButton                   saveDB;
  34.    private   JButton                   saveOB;
  35.    private   JButton                   exitB;
  36.  
  37.    // Autre
  38.    protected JFrame                    parentF;
  39.  
  40.    public CDebugFrame(String titre, JFrame parent,String fichierXMLDebug,XMLElement xe)
  41.    {
  42.       super(titre);
  43.       parentF = parent;
  44.       xmlOut = xe;
  45.       lastOpenPath = null;
  46.       xmlOutDoc = new XMLDocument();
  47.       Node mNode = (Node)xmlOutDoc.createElement("SPOT_Production_Orders" );
  48.       mNode.appendChild(xe.cloneNode(true));
  49.       xmlOutDoc.appendChild(mNode.cloneNode(true));
  50.       xmlOutDoc.setEncoding("UTF-8" );
  51.       xmlOutDoc.setVersion("1.0" );
  52.       fXML = fichierXMLDebug;
  53.       try
  54.       {
  55.          outFile = new FileOutputStream("result.xml" );
  56.          xmlOutDoc.print(outFile);
  57.          outFile.close();
  58.       }
  59.       catch(Exception eX)
  60.       {
  61.          System.out.println("Warning! Could not create XML Result File." );
  62.          CWarningDlg g = new CWarningDlg(this,"Simulator message","Could not create XML Result File." );
  63.       }
  64.      
  65.       try
  66.       {
  67.          parser = new DOMParser();
  68.          fd = new FileInputStream(fichierXMLDebug);
  69.          parser.parse(fd);
  70.          xd = parser.getDocument();
  71.       }
  72.       catch (Exception e)
  73.       {
  74.          System.out.println("Warning! Could not open XML Debug File." );
  75.          CWarningDlg g = new CWarningDlg(this,"Simulator message","Could not open XML Debug File." );
  76.       }
  77.       CEnvDisplay envDisp = new CEnvDisplay("Used vars",xd);
  78.       init();
  79.       this.show();
  80.       parent.setEnabled(false);
  81.       envDisp.show();
  82.    }
  83.  
  84.    public void mouseClicked(MouseEvent e)
  85.    {
  86.       if (!(bodyL.isSelectionEmpty()))
  87.       {
  88.          int index = bodyL.getSelectedIndex();
  89.          envDisp.currentInstr=index;
  90.          envDisp.setMainListVector();
  91.       }
  92.    }
  93.  
  94.    public void mouseEntered(MouseEvent e) {}
  95.    public void mouseExited(MouseEvent e) {}
  96.    public void mousePressed(MouseEvent e) {}
  97.    public void mouseReleased(MouseEvent e) {}
  98.  
  99.    public void init()
  100.    {
  101.       JPanel southP = new JPanel(new GridLayout(1,4));
  102.       if (xmlOut!=null)
  103.          nfoLabel = new JLabel("<html><p align=\"center\">Generated XML File OK</p></html>" );
  104.       else
  105.          nfoLabel = new JLabel("<html><p align=\"center\">Generated XML File KO</p></html>" );
  106.       this.setSize(800,480);
  107.       this.setLocation(10,96);
  108.       this.getContentPane().setLayout(new BorderLayout());
  109.       this.setResizable(true);
  110.      
  111.       // Mise en place des bouttons
  112.       showXMLB = new JButton("Show XML" );
  113.       showXMLB.addActionListener(this);
  114.       saveDB = new JButton("Save Debug Info" );
  115.       saveDB.addActionListener(this);
  116.       saveOB = new JButton("Save Generated XML" );
  117.       saveOB.addActionListener(this);
  118.       exitB = new JButton("Quit" );
  119.       exitB.addActionListener(this);
  120.      
  121.       // Ajout au panel Sud
  122.       southP.add(saveDB);
  123.       southP.add(saveOB);
  124.       southP.add(showXMLB);
  125.       southP.add(exitB);
  126.      
  127.       // Mise en place du corps principal
  128.       bodyL = new JList(bodyV = loadInfoFromDebugXML());
  129.       bodyL.addMouseListener(this);
  130.       scrollList = new JScrollPane(bodyL);
  131.       bodyL.setSelectedIndex(0);
  132.       bodyL.setVisibleRowCount(23);
  133.       // Ajout dans le main panel
  134.       this.getContentPane().add(nfoLabel,BorderLayout.NORTH);
  135.       this.getContentPane().add(scrollList,BorderLayout.CENTER);
  136.       this.getContentPane().add(southP,BorderLayout.SOUTH);
  137.    }
  138.  
  139.    public Vector loadInfoFromDebugXML()
  140.    {
  141.       Vector res = new Vector(10,10);
  142.       int i;
  143.       NodeList nl = xd.getElementsByTagName("currentInstruction" );
  144.       NodeList nlR = xd.getElementsByTagName("Results" );
  145.       for (i=0;i<nl.getLength();i++)
  146.          res.add("<HTML>" + nl.item(i).getFirstChild().getNodeValue() + "<font color=\"red\"> = " + nlR.item(i).getFirstChild().getNodeValue() + "</font></HTML>" );
  147.       System.out.println("->" + i);
  148.       return res;
  149.    }
  150.  
  151.    public void windowActivated(WindowEvent e) {}
  152.    public void windowClosed(WindowEvent e) {}
  153.    public void windowClosing(WindowEvent e) { parentF.setEnabled(true);this.dispose(); }
  154.    public void windowDeactivated(WindowEvent e) {}
  155.    public void windowDeiconified(WindowEvent e) {}
  156.    public void windowIconified(WindowEvent e) {}
  157.    public void windowOpened(WindowEvent e) {}
  158.  
  159.    public void actionPerformed(ActionEvent e)
  160.    {
  161.       if (e.getActionCommand().equals("Quit" ))
  162.       {
  163.          envDisp.dispose();
  164.          parentF.setEnabled(true);
  165.          this.dispose();
  166.       }
  167.       if (e.getActionCommand().equals("Save Debug Info" ))
  168.       {
  169.          JFileChooser cdataChoice;
  170.          if (lastOpenPath==null)
  171.             cdataChoice = new JFileChooser();
  172.          else
  173.             cdataChoice = new JFileChooser(lastOpenPath);
  174.          ExampleFileFilter filter = new ExampleFileFilter();
  175.          filter.addExtension("xml" );
  176.          filter.setDescription("XML Files" );
  177.          cdataChoice.setFileFilter(filter);
  178.          int choiceRet = cdataChoice.showSaveDialog(this);
  179.          if(choiceRet == JFileChooser.APPROVE_OPTION)
  180.          {
  181.             try
  182.             {
  183.                //sqlLabel.setText(cdataChoice.getSelectedFile().getAbsolutePath());
  184.                lastOpenPath = cdataChoice.getSelectedFile().getParent();
  185.                File fSour = new File(fXML);
  186.                File fDest = new File(cdataChoice.getSelectedFile().getAbsolutePath());
  187.                CommonClass.fileCopy(fSour,fDest);
  188.                System.out.println("Save as " + cdataChoice.getSelectedFile().getAbsolutePath() + " : Successful." );
  189.             }
  190.             catch(Exception exc)
  191.             {
  192.                System.out.println("Error while writing XML Debug file : " + exc);
  193.                CWarningDlg g = new CWarningDlg(this,"CData file saving","Error while saving XML Debug file." );
  194.             }
  195.          }
  196.       }
  197.      
  198.       if (e.getActionCommand().equals("Save Generated XML" ))
  199.       {
  200.          JFileChooser cdataChoice;
  201.          if (lastOpenPath==null)
  202.             cdataChoice = new JFileChooser();
  203.          else
  204.             cdataChoice = new JFileChooser(lastOpenPath);
  205.          ExampleFileFilter filter = new ExampleFileFilter();
  206.          filter.addExtension("xml" );
  207.          filter.addExtension("ord" );
  208.          filter.setDescription("XML Files" );
  209.          cdataChoice.setFileFilter(filter);
  210.          int choiceRet = cdataChoice.showSaveDialog(this);
  211.          if(choiceRet == JFileChooser.APPROVE_OPTION)
  212.          {
  213.             try
  214.             {
  215.                //sqlLabel.setText(cdataChoice.getSelectedFile().getAbsolutePath());
  216.                lastOpenPath = cdataChoice.getSelectedFile().getParent();
  217.                File fSour = new File("result.xml" );
  218.                File fDest = new File(cdataChoice.getSelectedFile().getAbsolutePath());
  219.                CommonClass.fileCopy(fSour,fDest);
  220.                System.out.println("Save as " + cdataChoice.getSelectedFile().getAbsolutePath() + " : Successful." );
  221.             }
  222.             catch(Exception exc)
  223.             {
  224.                System.out.println("Error while writing XML Result file : " + exc);
  225.                CWarningDlg g = new CWarningDlg(this,"CData file saving","Error while saving XML Result file." );
  226.             }
  227.          }
  228.       }
  229.      
  230.       if (e.getActionCommand().equals("Show XML" ))
  231.       {
  232.          try
  233.          {
  234.             Runtime.getRuntime().exec("cmd /c result.xml" );
  235.          }
  236.          catch(Exception eRT)
  237.          {
  238.             System.out.println("Cannot show XML File" );
  239.             CWarningDlg g = new CWarningDlg(this,"Simulator message","Could not open XML file." );
  240.          }
  241.       }
  242.    } 
  243. }


 
mais le voila...chuis plutot perturbé car en 5 ans, ca me l'a jamais fait

Reply

Marsh Posté le 21-02-2003 à 17:21:45    

j'ai déplacé le bloc mouselistener au cas ou j'aurais mis des {} bidons non détecté par le compilo...mais ca a rien changer...
 
je parle de la quantité de threads car j'ai déjà eu un pb de ce genre sur une machine ou je n'ai le droit qu'a 5 threads (hyper bizarre)...
sachant que chaque frame prend 1 thread...j'ai pensé a ca

Reply

Marsh Posté le 21-02-2003 à 18:04:43    

Là, je sèche.  :( L'étape suivante, c'est le passage au débogueur, mais ça va être serré.

Reply

Marsh Posté le 22-02-2003 à 21:35:34    

ajoute un
 

Citation :


if (body == null)
    System.out.println("Body est null !!!" );


 
au début de ta méthode mouseClicked


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 22-02-2003 à 21:35:34   

Reply

Marsh Posté le 24-02-2003 à 13:24:05    

dsl DarkLord, mais ca affiche rien...

Reply

Marsh Posté le 24-02-2003 à 13:45:01    

Code :
  1. public void mouseClicked(MouseEvent e)
  2.        {
  3.             if (!(bodyL.isSelectionEmpty()))
  4.             {
  5.                  int index = bodyL.getSelectedIndex();
  6.                  envDisp.currentInstr=index;
  7.                  envDisp.setMainListVector();
  8.             }
  9.        }


 
j'ai trouvé, le problème vient de envDisp mais le truc du nullPointer n'indique pas la bonne ligne...
 
la variable envDisp etait redeclaré dans le constructeur alors que c'est un champ de la classe...
 
merci de votre aide...

Reply

Marsh Posté le 24-02-2003 à 15:04:29    

D'où l'utilité de toujours accéder aux attributs (et méthodes) de la classe en les préfixant par "this." ...

Reply

Marsh Posté le 24-02-2003 à 15:13:56    

yep...
 
désolé pour le dérangement...
 
merci a vous

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed