Newsgroup: it.comp.java
Titolo: addActionListener

dentro ad un ActionListener è possibile Throwes delle eccezioni ??
per esempio il compilatore non digerisce queste righe di codice,mi dice
eccezione non riportata deve essere dichiarata o catturata ..... ma io non
son riuscito a capire come !!!
 save.addActionListener
     ( new ActionListener()
      { public void actionPerformed(ActionEvent e){
        ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("AgendaTree.save"));
   out.writeObject(agenda);
      }
     });
grazie Diego !


No, ovviamente. L'interfaccia ActionListener non prevede che tu possa lanciare
eccezioni: non puoi quindi dichiararla, l'unica possibilita' che hai e' 
quella di catturarla, ovvero gestirla all'interno.
  save.addActionListener(
      new ActionListener()
      { 
          public void actionPerformed(ActionEvent e)
          {
              try
              {
                  ObjectOutputStream out = new ObjectOutputStream(...);
                  out.writeObject(agenda);
              }
              catch (IOException ex)
              { 
                  // ... vedi tu, apri finestre, urla :-D
                  // consiglio personale: una stampa mettila sempre!
                  // ad esempio questa:
                  ex.printStackTrace();
                  // ovviamente sarebbe meglio avvertire anche l'utente
                  // che qualcosa e' andato storto!
              }
          }
      });
HTH,
    Bruno.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 quella di catturarla, ovvero gestirla all'interno.
Cavolo hai pienamente ragione,ti diro' avevo anche fatto il mio bel blocco
try catch,ma mi ero dimenticato di catturare l'eccezione giusta,sai di notte
con il sonno !!! Ora pero' il mio problema è che questa eccezione me la
cattura troppo spesso !!! :( cioè sempre !!!! allora io ho fatto cosi' :
save.addActionListener
     ( new ActionListener()
       { public void actionPerformed(ActionEvent e) {
            try {
                  ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("Agenda.sav"));
                  out.writeObject(agenda);
            }
           catch(IOException exc){ exc.printStackTrace();} // serve per far
stampare tutto lo stack di esecuzione del programma
         }
      });
e qui tutto ok mi compila, agenda è di tipo AgendaTree, che è  una mia
classe che estende TreeMap di java,se io salvo l'albero vuoto non ci sono
problemi,ma appena inserisco un appuntamento nell'agenda( cioè un nodo
dell'albero ) ............... boooooooooooooommmmmmmmmmm mi cattura
l'eccezione e me la spara fuori sulla shell !!!
Dove ho sbagliato ??
grazie
Diego


Questo non dovrebbe succedere, se si verifica un'eccezione significa che qualcosa e'
andato male: ti consiglio di isolare le istruzioni di salvataggio in un metodo e di
provarlo a parte:
public void ...
{
    ...
    save.addActionListener(new ActionListener(){ 
	    public void actionPerformed(ActionEvent e) 
            {
                try 
                {
	            save()
                }
                catch(IOException exc)
                { 
                    // Errore! Qualcosa e' andato storto
                    // serve per far stampare tutto lo stack 
                    // di esecuzione del programma
                    exc.printStackTrace();} 
                }
            }
        });
    ...
}
public void save() throws IOException
{
    ObjectOutputStream out = new ObjectOutputStream(...);
    out.writeObject(agenda);
    // che ne dici di una close()? 
    out.close();
}
Fatto questo prova a parte il metodo save(), l'errore dovrebbe essere li.
Ciao,
    Bruno.
|
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://bbruno.fasturl.it
|
| 
http://members.xoom.it/bbruno
| 
http://digilander.iol.it/bbossola
|

 Fatto questo prova a parte il metodo save(), l'errore dovrebbe essere li.
ciao ....
aut.close() l'avevo già provato,senza ottenere nessun risultato, adesso ho
provato anche a farlo come una funzione fuori dall' ActionListener,ma ...
nada nessun risultato mi caccia fuori l'eccezione !!! Cosa cavo puo' essere
???
la riga indagata è sicuramente questa ...
    out.writeObject(agenda);
perchè ho provato a commentarla ed al click sul JButton save gli facevo fare
solo la creazione dell ' ObjectOutputStream ( out nel nostro caso ),ma
appena cerco di fargli scrivere un oggetto con writeObject(myobject) mi
lancia l'eccezione !!! ma che cavolo devo fare ???
L'oggetto agenda che devo scrivere su out è di tipo :
public class AgendaTree extends TreeMap implements Map,Serializable
quindi non vedo il motivo per cui non debba funzionare !!
I nodi dell'albero sono di tre 3 tipi (3 classi differenti) che implementano
un'unica interfaccia..cosi' :
public interface App                              // l'interfaccia !!!
public class AppImp implements App    // un tipo di nodo
public class AppMod extends AppImp  // l'altro tipo di nodo
public class AppOrd extends AppImp   // l'altro tipo di nodo
i nodi  App utilizzano un'altra classe MyDate che ha dei campi e dei metodi
( ma vaaaa ???!!! ). L'unico dubbio che mi rimane è devo implementare
Serializable anche ad AppImp,AppMod ed AppOrd ????
grazie
Diego


Gli oggetti che scrivi devono essere *tutti* serializzabili, quindi in qualche modo devono
implementare l'interfaccia relativa.


 Serializable anche ad AppImp,AppMod ed AppOrd ????
CAVOLO !!!!!!!!!!!!! mi rispondo da solo ......
SI !!!!
il problema era questo oltre all'albero,anche tutti i nodi e tutti gli
elementi contenuti in un nodo devono implementare Serializable,certo che son
proprio stupido è ovvio altrimenti come fa a metterli in binario su un file
???
grazie lo stesso per le dritte !!
Diego