Hallo!
Ich habe hier ein riesen Problem, dass ich nicht verstehe. Für erscheint das logisch und sollte funktionieren, aber das Programm hat mal wieder ein Eigenleben. Ich habe eine Liste serialisiert und möchte sie nun nach dem Deserialisieren wieder benutzen, aber das funzt nicht. Er zeigt zwar die Listenelemente nach dem Deserialisieren an, aber sobald ich eine neues Element hinzufügen will, tut er das nicht - es kommt auch keine Fehlermeldung, er tut es einfach nicht. Dies ist meine Personenverwaltung, die wo die Objekte serialisiert werden:
und dies ist die Startklasse:
Was könnte ich falsch gemacht haben?
Ich habe hier ein riesen Problem, dass ich nicht verstehe. Für erscheint das logisch und sollte funktionieren, aber das Programm hat mal wieder ein Eigenleben. Ich habe eine Liste serialisiert und möchte sie nun nach dem Deserialisieren wieder benutzen, aber das funzt nicht. Er zeigt zwar die Listenelemente nach dem Deserialisieren an, aber sobald ich eine neues Element hinzufügen will, tut er das nicht - es kommt auch keine Fehlermeldung, er tut es einfach nicht. Dies ist meine Personenverwaltung, die wo die Objekte serialisiert werden:
Code:
import java.util.LinkedList;
import java.util.ListIterator;
import java.io.*;
public class Personenverwaltung implements Serializable
{
LinkedList list;
Personenverwaltung() throws Exception {
list=new LinkedList();
}
public void addPerson(Person person) throws Exception {
list.addLast(person);
}
public void speicherePersonen() throws FileNotFoundException, IOException {
ObjectOutputStream objOut = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("test.ser")));
objOut.writeObject(list);
objOut.close();
}
public void ladePersonen() throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream objIn = new ObjectInputStream(new BufferedInputStream(new FileInputStream("test.ser")));
list=(LinkedList)objIn.readObject();
objIn.close();
}
public void removePerson(String Name,String Vorname) throws Exception
{
ListIterator it=list.listIterator();
Person person;
int count=0;
for(;it.hasNext();)
{
person=(Person)it.next();
if(person.getName().equals(Name)&&person.getVorname().equals(Vorname))
{
it.remove();
System.out.println("Löschen von "+person.getName()+", "+person.getVorname()+"\n...erfolgreich.");
}
else {
count++;
}
}
if(count==list.size()) {
System.out.println("Die gesuchte Person konnte nicht gefunden werden!");
}
}
public void viewPerson() throws Exception
{
ListIterator it=list.listIterator();
Person person;
while(it.hasNext())
{
person=(Person)it.next();
System.out.println(person.toString());
System.out.println("<<<<<<<<<<<<<>>>>>>>>>>>");
}
}
und dies ist die Startklasse:
Code:
import java.io.*;
public class Start implements Serializable {
Personenverwaltung verw;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(isr);
Start() throws Exception {
verw=new Personenverwaltung();
mainmenu();
}
public void mainmenu() throws Exception
{
verw.ladePersonen();
System.out.println("Willkommen beim Personenverwaltungssystem\n");
System.out.println("Bitte wählen Sie eine Funktion aus:\n");
System.out.println("(1) neue Person anlegen");
System.out.println("(2) bestehende Person löschen");
System.out.println("(3) Personen auflisten");
System.out.println("(4) Person suchen");
System.out.println("(5) System beenden");
System.out.println("\nNummer eingeben:");
String mainNummer=stdin.readLine();
int befehl=Integer.parseInt(mainNummer);
switch(befehl)
{
case 1: addPersonMenu(); break;
case 2: deletePer(); break;
case 3: viewPer(); break;
case 4: searchPer(); break;
case 5: shutDown(); break;
default: System.out.println("Auswahl existiert nicht!\nBitte erneut versuchen.\n\n\n"); mainmenu(); break;
}
}
public void viewPer() throws Exception {
System.out.println("---------------------------------------------");
System.out.println("Personen anzeigen");
System.out.println("---------------------------------------------");
verw.viewPerson();
System.out.println("Sie werden zum Hauptmenü weitergeleitet.\n\n");
mainmenu();
}
public void deletePer() throws Exception
{
System.out.println("---------------------------------------------");
System.out.println("Bestehende Person löschen");
System.out.println("---------------------------------------------");
System.out.println("\nName eingeben:");
String Name=stdin.readLine();
System.out.println("Vorname eingeben:");
String Vorname=stdin.readLine();
verw.removePerson(Name,Vorname);
System.out.println("Möchten Sie eine weitere Person löschen? (y/n)");
String antwort=stdin.readLine();
if(antwort.equals("y")) {
deletePer();
}
else if(antwort.equals("n")) {
System.out.println("Sie werden zum Hauptmenü weitergeleitet.\n\n");
mainmenu();
}
else {
System.out.println("Ihr Eingabe ist nicht korrekt! Bitte erneut versuchen");
}
}
public void shutDown() throws FileNotFoundException, IOException
{
System.out.println("---------------------------------------------");
System.out.println("System beenden");
System.out.println("---------------------------------------------");
verw.speicherePersonen();
System.out.println("Daten werden gespeichert...\nProgramm wird beendet");
}
public void searchPer() throws IOException
{
System.out.println("---------------------------------------------");
System.out.println("Person suchen");
System.out.println("---------------------------------------------");
System.out.println("\nWelche Person möchten Sie suchen?");
System.out.println("Name eingeben: ");
String name=stdin.readLine();
System.out.println("Vorname eingeben: ");
String vorname=stdin.readLine();
verw.searchPerson(name,vorname);
}
public void addPersonMenu() throws Exception
{
System.out.println("---------------------------------------------");
System.out.println("Neue Person anlegen");
System.out.println("---------------------------------------------");
System.out.println("(1) für Administrator");
System.out.println("(2) für Professor");
System.out.println("(3) für Student");
System.out.println("(4) für Haupmenü");
System.out.println("\nNummer eingeben:");
String personNumber=stdin.readLine();
int befehl=Integer.parseInt(personNumber);
switch(befehl)
{
case 1: addAdmin(); break;
case 2: addProf(); break;
case 3: addStud(); break;
case 4: mainmenu(); break;
default: System.out.println("Auswahl existiert nicht!\nBitte erneut versuchen\n\n\n"); addPersonMenu(); break;
}
}
public void addAdmin() throws Exception
{
System.out.println("---------------------------------------------");
System.out.println("Neuen Admin anlegen");
System.out.println("---------------------------------------------");
System.out.println("Bitte eingeben...");
System.out.println("Name: ");
String name=stdin.readLine();
System.out.println("Vorname: ");
String vorname=stdin.readLine();
System.out.println("Personennummer");
String personennummer=stdin.readLine();
System.out.println("BAT-Stufe: ");
String BATStufe=stdin.readLine();
Administrator admin=new Administrator(name,vorname,personennummer,BATStufe);
verw.addPerson(admin);
System.out.println("\nAdmin hinzugefügt: \n"+admin.toString());
addPersonMenu();
}
....
....
Was könnte ich falsch gemacht haben?