Ich habe eine Swing-Anwendung, bei der sehr viele Eingaben gemacht werden und möchte diese abspeichern. Eines meiner Panels enthält vor allem eine JTextArea, was das einzige ist, was ich bei der Serialisierung sichern möchte.
Blöderweise pfuscht mir Java dabei ständig herum, wodurch mein Programm dann abstürzt, obwohl ich extra writeObject() und readObject() überschrieben habe, weil Java unbedingt sinnlos versucht, irgendwelche Oberklassen mit zu serialisieren.
Dabei ist alles, was ich in die Serialisierungsdatei schreiben möchte der Textinhalt der Textarea. Kann ich das irgendwie sicherstellen? Ich möchte also die vollständige Kontrolle über die Serialisierung haben.
Hier mein Quellcode:
Blöderweise pfuscht mir Java dabei ständig herum, wodurch mein Programm dann abstürzt, obwohl ich extra writeObject() und readObject() überschrieben habe, weil Java unbedingt sinnlos versucht, irgendwelche Oberklassen mit zu serialisieren.
Dabei ist alles, was ich in die Serialisierungsdatei schreiben möchte der Textinhalt der Textarea. Kann ich das irgendwie sicherstellen? Ich möchte also die vollständige Kontrolle über die Serialisierung haben.
Hier mein Quellcode:
Java:
class MainFrame()
{
JPanel prefixPanel = new PrefixPanel();
...
public void loadState(File file)
{
try
{
ObjectInputStream d = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
prefixPanel = (PrefixPanel)d.readObject();
d.close();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "Loading state not successful ("+e+").");
}
}
public void saveState(File selectedFile)
{
try
{
ObjectOutputStream e = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(selectedFile)));
e.writeObject(prefixPanel);
e.close();
}
catch (Exception e1)
{
JOptionPane.showMessageDialog(this, "Saving state not successful ("+e1+").");
}
}
...
}
Java:
public class PrefixPanel extends JPanel implements Serializable
{
JTextArea textArea = new JTextArea("default text");
private synchronized void writeObject( java.io.ObjectOutputStream s ) throws IOException
{
s.writeObject(textArea.getText());
}
private synchronized void readObject( java.io.ObjectInputStream s ) throws IOException, ClassNotFoundException
{
String str = (String)s.readObject();
textArea.setText(str);
}
public PrefixPanel()
{
...
JScrollPane areaScrollPane = new JScrollPane(textArea);
this.add(areaScrollPane);
...
}
Zuletzt bearbeitet: