|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 2
|
[Java] actionPerformed + IOException
Salve Raga,
Ho un problema come da titolo... ma vi spiego meglio: allora sto gestendo un menu e devo aggiungere il gestore dell'evento di un tasto, ma all'interno ho bisogno di richiamare un metodo che potrebbe lanciare una IOException (Scrive su un file di testo), vi incollo il codice che lo capirete sicuramente meglio: Item.addAciontListener(new ActionListener() { public void actionPerformed(ActionEvent eventitem) { //codice //Chiamo la funzione che lancia eccezioni } }); Ecco sommariamente è questo il codice che mi deve partire... mi sono Scusa se la soluzione potrebbe essere banale, ma sto facendo questo progetto per l'università ed è da poco che programmo ad oggetti. Grazie mille |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Anche se l'ereditarietà ti vieta di lanciare l'eccezione e di propagarla al metodo chiamante, puoi comunque gestire l'eccezione lì dentro.
Racchiudi il codice in un blocco try catch.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Da dentro il metodo actionPerformed() del tuo Item [immagino si tratti di MenuItem visto che parli di un menu] incapsuli il codice che fa il lavoro di scrivere su file in un altro thread e lanci il thread.
Tutto qua. In questo modo: 1) una eventuale eccezione di IO durante la scrittura su file dovrebbe venire propagata, dato che actionPerformed() temina appena lanciato il thread e quindi l'eccezione non viene propagata nel suo "scope"; 2) come secondo beneficio ottieni il fatto di far eseguire l'operazione di scrittura su file su un thread diverso dall'EDT che dovrebbe processare solo gli eventi grafici di AWT/Swing. Nello "scope" del metodo actionPerformed() del tuo Item ti trovi appunto in un contesto che viene eseguito dall'EDT; se, supponiamo, il file da scrivere è molto grande (che so: 100 MB) per tutto il tempo di scrittura su disco la tua interfaccia grafica rimmarrà bloccata in attesa del termine dell'operazione, e quindi non si aggiornerà ne permetterà all'utente di continuare ad usarla. Per questo tali operazioni che sono scatenate dai metodi actionPerformed(), di solito, si fanno eseguire a thread esterni.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 14-11-2008 alle 10:16. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:48.



















