avevi proprio ragione non avevo instanziato l'oggetto chooser ma ora è nato un altro problema ovvero, come hai visto per ottenere una finestra di dialogo la quale mi permetta di aprire un file ho usato il metodo showOpenDialog, ovviamente ho cercato anche di realizzare la finestra dii dialogo la quale mi permetta di salvare un file usando il metofo showSaveDialog ma mi compare il solo null pointer con il seguente messaggio della finestra di DOS:
sotto ti riporto le modifiche fatte con la nuova routine la quale "dovrebbe" gestire l'evento per l'apertura di un file:codice:C:\j2sdk1.4.1_01\bin>java TextEditTest java.lang.NullPointerException at TextEditFrame$FileMenuListener.menuSelected(TextEditFrame.java:356) at javax.swing.JMenu.fireMenuSelected(JMenu.java:1106) at javax.swing.JMenu$MenuChangeListener.stateChanged(JMenu.java:1199) at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.ja va:361) at javax.swing.DefaultButtonModel.setSelected(DefaultButtonModel.java:22 7) at javax.swing.JMenu.setSelected(JMenu.java:286) at javax.swing.JMenu.menuSelectionChanged(JMenu.java:1266) at javax.swing.MenuSelectionManager.setSelectedPath(MenuSelectionManager .java:81) at javax.swing.plaf.basic.BasicMenuUI$MouseInputHandler.mousePressed(Bas icMenuUI.java:314) at java.awt.Component.processMouseEvent(Component.java:5090) at java.awt.Component.processEvent(Component.java:4890) at java.awt.Container.processEvent(Container.java:1566) at java.awt.Component.dispatchEventImpl(Component.java:3598) at java.awt.Container.dispatchEventImpl(Container.java:1623) at java.awt.Component.dispatchEvent(Component.java:3439) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450 ) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3162) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095) at java.awt.Container.dispatchEventImpl(Container.java:1609) at java.awt.Window.dispatchEventImpl(Window.java:1585) at java.awt.Component.dispatchEvent(Component.java:3439) at java.awt.EventQueue.dispatchEvent(EventQueue.java:450) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh read.java:197) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre ad.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136) at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
codice:public class TextEditFrame extends JFrame{ ....... ....... private JFileChooser chooser = new JFileChooser(); ....... ....... //BARRA DEI MENU //menu di massimo livello FILE JMenu fileMenu = new JMenu("File"); //mostra il tasto mnemonico fileMenu.setMnemonic('F'); //agginge le voci del menu File JMenuItem newItem = fileMenu.add(new TestAction("New")); //agginge le voci del menu File con i tasti di scelta rapida JMenuItem openItem = new JMenuItem("Open"); openItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); fileMenu.add(openItem); openItem.addActionListener(new FileOpenListener()); //inserisce una linea separatrice fra le voci del menu File fileMenu.addSeparator(); saveItem = new JMenuItem("Save"); saveItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); fileMenu.add(saveItem); openItem.addActionListener(new FileSaveListener()); ..... ..... //BARRA DEGLI STRUMENTI //imposta le azioni dei pulsanti Action newAction = new TestAction("New", new ImageIcon("new.gif")); JButton openButton = new JButton(new ImageIcon("open.gif")); openButton.addActionListener(new FileOpenListener()); JButton saveButton = new JButton(new ImageIcon("save.gif")); saveButton.addActionListener(new FileSaveListener()); ...... ...... /* @effects apre una finestra di dialogo di scelta dei file **/ private class FileOpenListener implements ActionListener{ public void actionPerformed(ActionEvent evt){ //imposta la finestra di scelta dei file chooser.setCurrentDirectory(new File(".")); //accetta tutti i file di testo con estenzione .txt .java .c .cpp final ExtensionFileFilter filter = new ExtensionFileFilter(); filter.addExtension("txt"); filter.addExtension("java"); filter.addExtension("c"); filter.addExtension("cpp"); filter.setDescription("Text files"); chooser.setFileFilter(filter); //mostra una finestra di dialogo di scelta del file int result = chooser.showOpenDialog(TextEditFrame.this); //per salvare usare showSaveDialog //se il file di testo selezionato è accettato, lo visualizza nella casella di testo if(result == JFileChooser.APPROVE_OPTION) textArea.setText(chooser.getSelectedFile().getPath()); }//actionPerformed }//FileOpenListener /* @effects apre una finestra di dialogo di scelta dei file **/ private class FileSaveListener implements ActionListener{ public void actionPerformed(ActionEvent evt){ //imposta la finestra di scelta dei file chooser.setCurrentDirectory(new File(".")); //accetta tutti i file di testo con estenzione .txt .java .c .cpp final ExtensionFileFilter filter = new ExtensionFileFilter(); filter.addExtension("txt"); filter.addExtension("java"); filter.addExtension("c"); filter.addExtension("cpp"); filter.setDescription("Text files"); chooser.setFileFilter(filter); //mostra una finestra di dialogo di scelta del file int result = chooser.showSaveDialog(TextEditFrame.this); //per salvare usare showSaveDialog //se il file di testo selezionato è accettato, lo visualizza nella casella di testo if(result == JFileChooser.APPROVE_OPTION) textArea.setText(chooser.getSelectedFile().getPath()); }//actionPerformed }//FileSaveListener

Rispondi quotando