G
Gast
Gast
Hallo,
In meiner Anwendung habe ich eine LinkedList, die gespeichert und wieder geoeffnet werden kann. Ich habe unter WinXP eine Datei gespeichert, die auch problemlos wieder geoeffnet kann. Wenn ich diese Datei nun unter Win2000 oeffnen moechte, dann kommt ein Fehler beim Oeffnen, bei dem er sagt, dass er das erste Element der Liste beim Auslesen nicht finden kann. Das gleiche Problem habe ich, wenn ich ein Dokument mit einem neu erstellten ausfuehrbaren Jar-File oeffnen moechte. Der Fehler taucht also immer dann auf, wenn die Datei, die geoeffnet werden soll, nicht von dieser Anwendung unter diesem Betriebssystem auch gespeichert wurde. D.h. wenn ich unter Win2000 neue Dateien erstelle, dann lassen diese sich problemlos auch wieder oeffnen.
Woran kann das liegen?
Hier ist mein Quellcode:
Kann mir vielleicht jemand helfen?
In meiner Anwendung habe ich eine LinkedList, die gespeichert und wieder geoeffnet werden kann. Ich habe unter WinXP eine Datei gespeichert, die auch problemlos wieder geoeffnet kann. Wenn ich diese Datei nun unter Win2000 oeffnen moechte, dann kommt ein Fehler beim Oeffnen, bei dem er sagt, dass er das erste Element der Liste beim Auslesen nicht finden kann. Das gleiche Problem habe ich, wenn ich ein Dokument mit einem neu erstellten ausfuehrbaren Jar-File oeffnen moechte. Der Fehler taucht also immer dann auf, wenn die Datei, die geoeffnet werden soll, nicht von dieser Anwendung unter diesem Betriebssystem auch gespeichert wurde. D.h. wenn ich unter Win2000 neue Dateien erstelle, dann lassen diese sich problemlos auch wieder oeffnen.
Woran kann das liegen?
Hier ist mein Quellcode:
Code:
//LinkedList des Struktogramm speichern unter, SpeicherDialog oeffnen
public boolean structDateiSpeichernUnter()
{
//Als Dateifilter SX Dateien verwenden
JFileChooser fchooser=new JFileChooser();
fchooser.addChoosableFileFilter(new SXFilter());
fchooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fchooser.setMultiSelectionEnabled(false);
//Speicherdialog anzeigen
if (JFileChooser.APPROVE_OPTION == fchooser.showSaveDialog(fchooser))
{
String name=fchooser.getSelectedFile().getName();
if(name.endsWith(".sx"))
aktDateiname = fchooser.getSelectedFile().getPath();
else
aktDateiname = fchooser.getSelectedFile().getPath()+".sx";
return structDateiSpeichern();
}
else { return false; }
}
//Speichern der LinkedList, wenn noch kein Name eingeben, dann speichern unter aufrufen
public boolean structDateiSpeichern()
{
if(aktDateiname==null)
{
return structDateiSpeichernUnter();
}
try
{
//Datei erstellent
File datei = new File(aktDateiname);
aktDateiname = datei.getName();
this.setName(aktDateiname);
String pfad=datei.getPath();
//Liste zum Speichern erstellen
LinkedList outList=new LinkedList();
this.getRootObject().setAlgorithmus(StructX.getAktivFenster().getAlgorithmus());
//als erstes RootObject in Speicherliste einfügen
outList.add(this.getRootObject());
//Struktogramm in Speicherliste einfügen
this.getRootObject().addSpeicherList(outList);
ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream(datei));
os.writeObject(outList);
os.close();
//auf keine Änderungen setzen
this.setGeaendert(false);
StructX.getAktivFenster().setTitle("Struktogramm Nr."+Fenster.getOpenFrameCount() +" : "+this.getName());
StructX.getAktivFenster().revalidate();
this.setGespeichert(true);
}
catch (IOException e) {}
return false;
}
//oeffnet eine gespeicherte LinkedList
public void structDateiOeffnen()
{
//Datei öffnen
String name="";
JFileChooser fchooser=new JFileChooser();
fchooser.addChoosableFileFilter(new SXFilter());
fchooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fchooser.setMultiSelectionEnabled(false);
if (JFileChooser.APPROVE_OPTION == fchooser.showOpenDialog(fchooser))
{
aktDateiname=fchooser.getSelectedFile().getPath();
this.setName(fchooser.getSelectedFile().getName());
//Liste erstellen
LinkedList ret=new LinkedList();
//Liste, die in Datei enthalten ist, auslesen
try
{
ObjectInputStream is=new ObjectInputStream(new FileInputStream(aktDateiname));
ret=(LinkedList)is.readObject();
is.close();
//ausgelesene Liste durchlaufen
Iterator it=ret.iterator();
//Blockeinstellung auslesen
//HIER KOMMT DER FEHLER: (NoSuchListElement):
if(((StructObject)ret.getFirst()).getBlock()==true)
this.getRootObject().setBlock(true);
//Variablen auslesen:
ArrayList variablen=((StructObject)ret.getFirst()).getAlgorithmus().getVariablenListe();
Iterator itVar=variablen.iterator();
while(itVar.hasNext())
{
Variable var=(Variable)itVar.next();
StructX.getAktivFenster().getAlgorithmus().addVariable(var);
StructX.getAktivFenster().aendern.setEnabled(true);
}
//Objekte auslesen:
while(it.hasNext())
{
StructObject so=(StructObject)it.next();
//für jedes enthaltene Objekt neues in aktuellen Struktogramm anlegen
if(so!=ret.getFirst() && so.getArt()!=2 && so.getArt()!=9 && so.getArt()!=15 && so.getArt()!=16 )
{ this.legeStructObjectAn(so);
int neuH=StructX.getAktivFenster().getStruktogramm().getHoehe()+(40*ret.size());
StructX.getAktivFenster().getStruktogramm().setHoehe(neuH);
}
}
}catch(Exception e)
{
System.out.println("Fehler beim Oeffnen!");
}
}
//Änderungen vermerken
this.setGeaendert(false);
StructX.getAktivFenster().setTitle("Struktogramm Nr."+Fenster.getOpenFrameCount() +" : "+this.getName());
StructX.getAktivFenster().revalidate();
}
Kann mir vielleicht jemand helfen?