Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
nicht das ich wüsste, mache es aer selber so - habe den Code aber aus den Kopf aufgeschrieben, deshalb kann es sein das er nicht 100%-ig stimmt (der Link behandelt im Prinzip die Theorie des ganzen)
sry wenn ich frage (mach das zum erstenmal so "serialisierung" aber wo speicher ich das denn? hab hier ein quelltext der die serialisierung von arraylisten handeln soll:
Code:
private void writeObject(ObjectOutputStream s) throws IOException
{
// The 'size' field.
s.defaultWriteObject();
// We serialize unused list entries to preserve capacity.
int len = data.length;
s.writeInt(len);
// it would be more efficient to just write "size" items,
// this need readObject read 'size' items too.
for (int i = 0; i < size; i++)
s.writeObject(data[i]);
}
private void readObject(ObjectInputStream s)
throws IOException, ClassNotFoundException
{
// the 'size' field.
s.defaultReadObject();
int capacity = s.readInt();
data = new Object[capacity];
for (int i = 0; i < size; i++)
data[i] = s.readObject();
}
jedoch wenn ich da meine werte eintrage spinnt das total
Wenn ich da was zu sagen darf: Keine Ahnung, was RBS2002 da blubbert, wovon er redet.
Es hat aber nichts wirklich mit Deiner Fragestellung zu tun, denn die deutete sehr deutlich auf die Serialisierung
ok, also kann ich mit seiner antwort so nix anfangen?
naja komm ja selbst auch nicht weiter bei meinem projekt nun hab ich ein:
Exception in thread "main" java.lang.NullPointerException
at java.io.ByteArrayInputStream.<init>(Unknown Source)
at Test.Testprogramm.deserializeFromString(Testprogramm.java:31)
at Test.Textfeld.main(Textfeld.java:122)
Was auch immer das ist - er redet keinesfalls von ArrayList. Ich tippe eher auf JList, dadurch bekommt das zumindest etwas Sinn, wenn auch nicht in Zusammenhang mit dem Threadthema.
mach das zum erstenmal so "serialisierung" aber wo speicher ich das denn?
juhuuu^^ ich hab es geschafft das er mir keine fehlermeldung mehr bring jedoch zeigt er am anfang immer nur ein leere ArrayList (hab es jedoch bald geschafft )
Code:
package Test;
import java.awt.*;
import java.awt.event.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import javax.swing.*;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import Test.Fenster_schließen;
public class Textfeld extends JFrame implements ActionListener {
static String input;
public JTextField tf;
static int anzahl = 2;
static ArrayList<String> labelliste = new ArrayList<String>(anzahl);
JButton[] lb = new JButton[anzahl];
public Textfeld() {
super("JTextField");
addWindowListener(new Fenster_schließen(true));
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
tf = new JTextField("Test", 20);
tf.addActionListener(this);
cp.add(tf);
for (int i = 0; i < anzahl; ++i) {
lb[i] = new JButton();
lb[i].setBounds(10, 10 + (i * 50), 120, 20);
lb[i].addActionListener(this);
cp.add(lb[i]);
}
lb[0].setText("Einfügen");
lb[1].setText("Anzeigen");
}
public String serializeToString(ArrayList<String> original)
throws IOException, ClassNotFoundException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(original);
oos.close();
out.close();
// String ausgeben
String output = Base64.encode(out.toByteArray());
return output;
}
public ArrayList<String> deserializeFromString(String serializedObject)
throws IOException, ClassNotFoundException {
byte[] pick = Base64.decode(serializedObject);
InputStream in = new ByteArrayInputStream(pick);
ObjectInputStream ois = new ObjectInputStream(in);
ArrayList<String> deserializedObject = (ArrayList<String>) ois.readObject();
ois.close();
in.close();
return deserializedObject;
}
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
if (cmd.equals("Einfügen")) {
labelliste.add(tf.getText());
System.out.println(tf.getText()
+ " wurde in die Labelliste eingefügt! ");
} else if (cmd.equals("Anzeigen")) {
System.out.println("Es befinden sich: " + labelliste
+ " in der Labelliste!");
} else {
System.out.println("---ActionEvent---");
System.out.println(tf.getText());
labelliste.add(tf.getText());
System.out.println(tf.getText() + " ist nun in der Lablliste! ");
}
}
public static void main(String[] args) throws IOException,
ClassNotFoundException {
Textfeld frame = new Textfeld();
frame.setLocation(100, 100);
frame.setSize(300, 150);
frame.setVisible(true);
Textfeld app = new Textfeld();
// construct test object
ArrayList<String> original = new ArrayList<String>(labelliste);
// serialize
String output = app.serializeToString(original);
// deserialize
ArrayList<String> des = app.deserializeFromString(output);
// test
System.out.println(des);
}
}
Wenn ich da was zu sagen darf: Keine Ahnung, was RBS2002 da blubbert, wovon er redet.
Es hat aber nichts wirklich mit Deiner Fragestellung zu tun, denn die deutete sehr deutlich auf die Serialisierung
Wenn Du etwas neues probierst, ist es immer besser, nicht so viel Klimbims drum herum zu haben, sondern das Programm nur auf das Nötigste herunterzubrechen. Damit gehst Du Fehlern aus dem Weg, die vielleicht nur wegen des Klimbims entstehen.
Klimbims ist in diesem Fall Dein Fenster.
Es wird eine leere ArrayList angezeigt, weil...
...sie leer ist!
Code:
static int anzahl = 2;
static ArrayList<String> labelliste = new ArrayList<String>(anzahl);
// viel code...
ArrayList<String> original = new ArrayList<String>(labelliste);
// serialize
String output = app.serializeToString(original);
// deserialize
ArrayList<String> des = app.deserializeFromString(output);
Du erzeugst erst Deine Labelliste. Die ist nach der Erzeugung erstmal leer.
Dann erzeugst Du unten nochmal eine Liste, die Du original nennst, ihr aber (die leere) labelliste übergibst. Warum doppelt gemoppelt?
Naja, diese immer noch leere original serialisierst Du und deserialisierst sie anschliessend. Und die deserialisierte Liste ist immer noch leer.
Lass doch erstmal das Fenster weg und fülle eine ArrayList mit ein paar Strings. Und die (de)serialisierst Du dann zum testen und schaust, ob es funktioniert.
Weiterhin erzeugst Du erst ein Objekt "frame" und machst es visible. Dann erzeugst Du aber noch ein Objekt und benutzt das dann zum serialisieren.
Alles in allem ziemlich durcheinander. Ich empfehle Dir, Dein Javabuch wieder in die Hand zu nehmen und nochmal ein paar Kapitel zurückzugehen...