|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2009
Messaggi: 40
|
[Java] Passare il controllo da un Frame caricato da main a un Frame caricato da file
Ciao a tutti. Vi illustro il mio problema:
Codice:
package ascoltatori;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import campoMinato.MyFrame;
public class MyLoadGameListener implements ActionListener {
JFileChooser chooser;
FileNameExtensionFilter filter;
MyFrame mainFrame, newFrame;
public MyLoadGameListener(MyFrame parent) {
mainFrame = parent;
chooser = new JFileChooser();
filter = new FileNameExtensionFilter("CMP Files", "cmp");
chooser.setFileFilter(filter);
}
public void actionPerformed(ActionEvent e) {
JMenuItem loadGame = (JMenuItem) e.getSource();
int returnVal = chooser.showOpenDialog(loadGame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
FileInputStream f = null;
ObjectInputStream is = null;
try {
f = new FileInputStream(chooser.getSelectedFile().getPath());
is = new ObjectInputStream(f);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
try {
newFrame = (MyFrame) is.readObject();
newFrame.setVisible(true);
mainFrame.setVisible(false);
is.close();
} catch (IOException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
}
}
1) Creare un nuovo oggetto MyFrame al posto di quello corrente. 2) Salvare il MyFrame corrente su file. 3) Caricare un MyFrame da file. Il codice postato rappresenta la classe ascoltatrice predisposta per il caricamento da file di un MyFrame precedentemente salvato. Il Frame viene caricato correttamente in memoria, ma non ascolta più gli eventi legati ai bottoni della matrice e a 2 delle JMenuItem, quella di salvataggio e quella di caricamento, come mai? Chi mi sa aiutare? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Gli ascoltatori di evento non vengono serializzati. Devi personalizzare la serializzazione per salvarli e caricarli.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: May 2009
Messaggi: 40
|
Quote:
Che posso fare? |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se vuoi serializzare una classe che non è serializzabile devi dichiarare un'estensione di quella classe, renderla esternalizzabile (implements Externalizable) e gestire "manualmente" la lettura e scrittura dei dati che ti interessano nel flusso seriale.
Per i JavaBean - tutti i componenti Swing sono dei JavaBean - esiste un diverso meccanismo di persistenza, documentato nel package java.beans.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
* snip
__________________
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 : 23-07-2009 alle 16:03. Motivo: ho sbagliato |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: May 2009
Messaggi: 40
|
Quote:
Inoltre ho un'altra domanda, se la classe JFileChooser è serializabile, possibile che certi metodi utilizzano come parametri riferimenti di classi non serializzabili? Se vedo nelle api oltre alla FileFilter c'è anche la FileSystemView che non implementa Serializable, purtroppo l'interfaccia Externalizable non la conosco e credo neanche di non poterla usare nel mio progetto. A questo punto potrei rinunciare definitivamente a utilizzare una JFileChooser, però come mi comporto per dare nome e percorso del file che prima salverò su file System e poi caricherò? |
|
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
I parametri passati ai metodi sono una cosa, invece i membri/campi della classe un'altra. Avesse avuto un campo non serializzabile allora avrei storto il naso anch'io... Esaminando la gerarchia delle classi Swing/AWT, si evince che JFileChooser è Serializable, perchè, come tutti gli altri componenti visuali può vantare di discendere da java.awt.Component (che implementa Serializable). Quote:
__________________
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) |
||
|
|
|
|
|
#8 |
|
Member
Iscritto dal: May 2009
Messaggi: 40
|
Grazie, ho risolto lo stesso rinunciando alla classe FileNameExtensionFilter.
Ho un ultima domanda sul Javadoc, io uso Eclipse, e quando lo genero, tutto funziona come deve andare, eccetto un particolare, non ho i link ai metodi della classe Object e ai package di java, come faccio a inserirli? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:33.




















