Hallo!
Hab ein kleines Problem mit ArrayList.
Arbeite an einem Programm in dem auch ein "Adressbuch" eingebettet wird.
Nun hat eigentlich alles schon sehr gut funktioniert. Die Objekte konnte ich schon in eine Datei schreiben bzw. auch jederzeit wieder auslesen. Jedoch war meine erste Lösung sehr unsauber, da ich immer zuerst ein Adressbuch-Array mit 1000 Objekten erstellte. Effektiver wäre es aber, wenn sich die Größe dynamisch ändern würde.
Ich hoffe, dass ich euch anhand eines Code-Ausschnitts das Problem verdeutlichen kann. Als Beispiel habe ich den Code-Bereich gewählt, bei dem man einen Eintrag löschen kann.
Hier noch die alte Version:
Und hier der Versuch es mit einer ArrayList zu lösen (es fehlt der "remove"-Teil):
Die ganzen System.Out's dienen mir dazu zu sehen, was ich da eigentlich rausbekomme. Ich weiß natürlich auch, dass hier der eigentliche "Remove"-Teil fehlt, aber ich möchte es vorher mal schaffen, dass ich die Objekte richtig einlese. Dann sollte das löschen eh kein Problem mehr darstellen.
Wenn ich es so ausführe bekomme ich keine schöne Ausgabe sondern nur "[[LAddressbook.User;@1fcc0a2][[LAddressbook.User;@1fcc0a2][Ljava.lang.Object;@caf6c1[LAddressbook.User;@1fcc0a2" und so.
Hier noch der ObjectLoader:
Und hier noch die User-Klasse:
Vielleicht könnt ihr mir ja weiterhelfen. Hab auch schon in einem ähnlichen Thread was darüber gelesen, aber das konnte mir leider bei meinem Kernproblem auch nicht weiterhelfen.
Bonz
Hab ein kleines Problem mit ArrayList.
Arbeite an einem Programm in dem auch ein "Adressbuch" eingebettet wird.
Nun hat eigentlich alles schon sehr gut funktioniert. Die Objekte konnte ich schon in eine Datei schreiben bzw. auch jederzeit wieder auslesen. Jedoch war meine erste Lösung sehr unsauber, da ich immer zuerst ein Adressbuch-Array mit 1000 Objekten erstellte. Effektiver wäre es aber, wenn sich die Größe dynamisch ändern würde.
Ich hoffe, dass ich euch anhand eines Code-Ausschnitts das Problem verdeutlichen kann. Als Beispiel habe ich den Code-Bereich gewählt, bei dem man einen Eintrag löschen kann.
Hier noch die alte Version:
Code:
if (e.getActionCommand().equalsIgnoreCase("del")) {
if (address.getSelectedItem().equals("broadcast")) {
JOptionPane.showMessageDialog(null,"broadcast kann nicht gelöscht werden!");
}
else {
int ret;
ret = JOptionPane.showConfirmDialog(null, address.getSelectedItem() + " wirklich löschen?","Nachricht",JOptionPane.OK_CANCEL_OPTION);
System.out.println(ret);
if (ret == 0) {
Addressbook buch = new Addressbook(1000);
int i, size;
ObjectLoader ol = new ObjectLoader();
buch.setUser(ol.load());
address.getSelectedItem();
size = buch.getSize();
for (i = 0; i < size; i++) {
if (address.getSelectedItem().equals(buch.getUser(i).
getName())) {
buch.remove(i);
i = size;
}
}
ObjectSaver os = new ObjectSaver(buch.getInhalt());
os.save();
}
}
refreshComboBox();
}
Und hier der Versuch es mit einer ArrayList zu lösen (es fehlt der "remove"-Teil):
Code:
if (e.getActionCommand().equalsIgnoreCase("del")) {
if (address.getSelectedItem().equals("broadcast")) {
JOptionPane.showMessageDialog(null,"broadcast kann nicht gelöscht werden!");
}
else {
int ret;
ret = JOptionPane.showConfirmDialog(null, address.getSelectedItem() + " wirklich löschen?","Nachricht",JOptionPane.OK_CANCEL_OPTION);
System.out.println(ret);
if (ret == 0) {
ArrayList list1 = new ArrayList();
int i = 0, size;
ObjectLoader ol = new ObjectLoader();
// list1.add(ol.load());
// list1.toArray(ol.load());
list1.add(0, ol.load());
// list1.add(1, ol.load());
// list1.add(ol.load());
size = list1.size();
System.out.println(size);
System.out.print(list1);
System.out.print(list1.toString());
System.out.print(list1.toArray());
System.out.print(list1.get(0));
}
}
refreshComboBox();
}
Die ganzen System.Out's dienen mir dazu zu sehen, was ich da eigentlich rausbekomme. Ich weiß natürlich auch, dass hier der eigentliche "Remove"-Teil fehlt, aber ich möchte es vorher mal schaffen, dass ich die Objekte richtig einlese. Dann sollte das löschen eh kein Problem mehr darstellen.
Wenn ich es so ausführe bekomme ich keine schöne Ausgabe sondern nur "[[LAddressbook.User;@1fcc0a2][[LAddressbook.User;@1fcc0a2][Ljava.lang.Object;@caf6c1[LAddressbook.User;@1fcc0a2" und so.
Hier noch der ObjectLoader:
Code:
public class ObjectLoader {
private User[] userObject;
private String file;
public ObjectLoader() {
}
public User[] load()
{
file = "addressbook.txt";
FileInputStream fis = null;
ObjectInputStream is = null;
try
{
fis = new FileInputStream(file);
is = new ObjectInputStream(fis);
userObject = (User[])is.readObject();
is.close();
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"Fehler beim Laden!");
}
return userObject;
}
Und hier noch die User-Klasse:
Code:
public class User implements Serializable{
private String name;
private String ipadress;
public User(String name) {
this.name = name;
}
public void setIpadress (String ipadress) {
this.ipadress = ipadress;
}
public String getIpadress() {
return ipadress;
}
public String getName() {
return name;
}
public String toString() {
return (name + " " + ipadress);
}
}
Vielleicht könnt ihr mir ja weiterhelfen. Hab auch schon in einem ähnlichen Thread was darüber gelesen, aber das konnte mir leider bei meinem Kernproblem auch nicht weiterhelfen.
Bonz