Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problemi con La Finestra di Dialogo per aprire un file in Java

    Spulciando dai libri di java ho trovato una routine la quale mi permette di aprire una finestra di dialogo la quale mi dovrebbe far aprire un file. Uso il condizionale inquanto vi sono degli errori; per essere più preciso riporto i frammenti del codice interessati con i relativi messaggi di errore:
    Packeg usati:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.beans.*;
    import java.util.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.swing.filechooser.FileFilter;
    import java.swing.filechooser.FileView;
    ...
    ExtensionFileFilter.java classe che gestisce il filtro di selezione del file da aprire:

    codice:
     
    /**
     @effects rappresenta un filtro di file corrispondente a tutti i file con un dato set di estensioni
    */
     
    class ExtensionFileFilter extends FileFilter{
     
     private String description = "";
     private ArrayList extensions = new ArrayList();
     
     /**
      @effects Aggiunge un'estensione riconosciuta da questo diltro di file.
      @param extension rappresenta un'estensione di file (come ".txt" o "txt"
     */
     public void addExtension(String extension){
      if(!extension.startsWith("."))
       extension = "." + extension;
      extensions.add(extension.toLowerCase()); 
     }//addExtension
     
     /**
      @effects Imposta una Descrizione per il set di file riconosciuti da questo filtro di file.
      @param aDescription rappresenta una descrizione del set di file
     */
     public void setDescription(String aDescription){
      description = aDescription;
     }//setDescription
     
     /**
      @effects restituisce una descrizione per il set di file riconosciuti da questo filtro di file.
      @return una descrizione del set di file.
     */
     public String getDescription(){
      return description; 
     }//getDescription
     
     public boolean accept(File f){
      if(f.isDirectory())
       return true;
      String name = f.getName().toLowerCase();
      
      //controlla se il nome di file termina con una delle estensioni
      for(int i = 0; i < extensions.size(); i++)
       if(name.endsWith((String)extensions.get(i)))
        return true;
      return false; 
     }//accept
     
    }
    TextEditFrame.java è la classe che implementa l'editor di testo.

    Si tenga presente che il comando Open viene implementato sia da voce di menu File:

    codice:
     
    //BARRA DEI MENU
     ... 
     JMenuItem openItem = new JMenuItem("Open");
     openItem.setAccelerator(KeyStroke.getKeyStroke(
         KeyEvent.VK_O, InputEvent.CTRL_MASK));
     fileMenu.add(openItem);
     openItem.addActionListener(new FileOpenListener());
     ...
    JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);
    menuBar.add(fileMenu);
    ...
     
    che da barra degli strumenti
     
    //BARA DEGLI STRUMENTI
    ...
    JButton openButton = new JButton(new ImageIcon("open.gif"));
    openButton.addActionListener(new FileOpenListener());
    ...
    //popola la barra degli strumenti
    JToolBar bar = new JToolBar("Standard bar");
    ...
    bar.add(openButton);
    ...  
     
    mentre di seguito è riportata l'azione associata ai due eventi:
     
    /*
      @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
    Messaggi di errore: al momento della compilazione della classe di filtro per il file selezionato, ovvero il file ExtensionFileFilter.java ricevo il seguente messaggio di errore:

    codice:
     
    C:\j2sdk1.4.1_01\bin>javac ExtensionFileFilter.java
    ExtensionFileFilter.java:9: package java.swing.filechooser does not exist
    import java.swing.filechooser.FileFilter;
                                  ^
    ExtensionFileFilter.java:10: package java.swing.filechooser does not exist
    import java.swing.filechooser.FileView;
                                  ^
    ExtensionFileFilter.java:16: no interface expected here
    class ExtensionFileFilter extends FileFilter{
                                      ^
    3 errors
    Da come si evince dal messaggio il JDK mi dice che i package FileFilter e FileView non esistono !! Come posso risolvere tale problema?
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    semplicemente, il nome di package corretto è javax.swing.eccetera
    Quindi ci sono degli errori di digitazione negli import.

    Comunque, su http://java.sun.com trovi la documentazione.

    Cià
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

  3. #3
    Come ti ha fatto già notare Pablob c'è un errore di digitazione

    import java.swing.filechooser.FileFilter;
    import java.swing.filechooser.FileView;

    devi scriverlo così

    import javax.swing.filechooser.FileFilter;
    import javax.swing.filechooser.FileView;

    COntrolla gli altri import .
    Quando usi le swing il package precedenteè javax

    Ciauz

    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  4. #4
    Grazie alla tua risposta mi sono accorto di quanto sono sbadato anche se ora è nato un nuovo problema, ovvero il programma viene compilato ma al momento che cerco di aprire la finestra di dialogo OPEN, sia cliccando dal tasto della barra degli strumenti che dal menu File, mi compare il seguente messaggio nella finestra DOS:

    codice:
    C:\j2sdk1.4.1_01\bin>java TextEditTest
    java.lang.NullPointerException
            at TextEditFrame$FileOpenListener.actionPerformed(TextEditFrame.java:384
    )
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:17
    64)
            at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Abstra
    ctButton.java:1817)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
    .java:419)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257
    )
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
    istener.java:245)
            at java.awt.Component.processMouseEvent(Component.java:5093)
            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:3165)
    
            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)
    Inolte è possibile che ogni qualvolta io cerchi di chiudere l'appilcazione mediante il comando Esci del menu file o chiudendo la finestra forzatamente (cliccando sul tasto chiudi della finestra) mi si blocca il computer? Premetto che il mio portatile è un Pentium 4 con Windows 2000 Professional.
    Giuseppe SPECCHIO

  5. #5
    Controlla di aver inizializzato tutti i componenti.
    chooser dove lo hai dichiarato???
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  6. #6
    La compoenente chooser è stata dichiarata come variabile globale dentro la classe textEditFrame ovvero quella che implementa il word editor, o meglio dovrebbe! Comunque per completezza ti riporto le parti del codiche che ne fanno uso. Grazie anticipatamente.

    codice:
    public class TextEditFrame extends JFrame{
    	
    	/***	Variabili di Classe		***/
    	private JTextArea textArea;
    	private JTextField from;
    	private JTextField to;
    	
    	private JComboBox faceCombo;
    	private JComboBox sizeCombo;
    	
    	private JMenuItem saveItem;
    	private JMenuItem saveAsItem;
    	private JCheckBoxMenuItem readonlyItem;
    	private JPopupMenu popup;
    	
    	private int fontSize;
    	private String fontFace;
    	private int fontStyle;
    	private Font font;
    	
    	private AboutDialog dialog;
    	
    	private JFileChooser chooser;
    	
    	/***	Costruttore		***/
    
    ........
    ........
    
    //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());
    		
    ............
    ............
    
    //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());
    		
    ............
    ............
    
    
    	/*
    		@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
    Giuseppe SPECCHIO

  7. #7
    Non vorrei aver letto male , ma mi sembra che il JFileChooser non lo inzializzi mai . Per quello ti da nullPointerException
    perchè esegui chooser.set() quando chooser =null.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  8. #8
    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:

    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)
    sotto ti riporto le modifiche fatte con la nuova routine la quale "dovrebbe" gestire l'evento per l'apertura di un file:

    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
    Giuseppe SPECCHIO

  9. #9
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    hai messo openItem.addActionListener(new FileOpenListener()); e openItem.addActionListener(new FileSaveListener()); strano
    poi guarda la riga dove genera l'errore

  10. #10
    hai messo openItem.addActionListener(new FileOpenListener()); e openItem.addActionListener(new FileSaveListener()); strano
    poi guarda la riga dove genera l'errore
    Penso si sia proprio sbagliato
    saveItem.addActionListener(new FileSaveListener());
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.