2016-07-03 17 views
0

Ich arbeite derzeit an einem Projekt und möchte ein Objekt in einer Datei mit ObjectOutputStream zu einem Speicherort speichern, den der Benutzer mit Hilfe von JFileChooser auswählt. Das Objekt wird jedoch immer im Stammverzeichnis des Programms in der Datei "null" (%ProjectDirectory%/null) gespeichert.filePath von JFileChooser ist null

Hier ist meine Methode saveObjects, die eine LinkedList von Objekten in einer Datei speichert:

public void saveObjects(String filePath) { 
    try { 
     FileOutputStream os = new FileOutputStream(filePath); 
     ObjectOutputStream oos = new ObjectOutputStream(os); 
     oos.writeObject(oceanObjects); 
     oos.close(); 
     os.close(); 
    } catch(IOException e) { 
     System.err.println(e); 
    } 
} 

Diese Anweisung ruft die Methode saveObject mit dem filepath als Parameter (filePath ist ein String, ich habe bereits versucht, eine zu verwenden, Datei)

saveObjects(view.getFilePath()); 

view ist eine Instanz OceanLifeView und view.getFilePath() ist ein Getter-Methode dieser Klasse, gibt den Pfad zurück, in dem die Datei gespeichert werden soll (als String).

getFilePath() sieht wie folgt aus:

public String getFilePath() { 
    return filePath; 
} 

Und mein OceanLifeView wie folgt aus:

OceanLifeView(String title, int type) { 
    if(...) { 
     ... 
    }else if (title.equals("fileChooser")) { 
     fileChooser = new JFileChooser(); 
     fileChooser.setFileSelectionMode(FILES_ONLY); 

     if (type == 0) { 
      //Load Button functions 
      System.out.println("De-Serialisation started fileChooserGUI!"); 
      returnVal = fileChooser.showOpenDialog(fileChooser); 
     } else { 
      //Save Button functions 
      System.out.println("Serialisation started fileChooserGUI!"); 
      returnVal = fileChooser.showSaveDialog(fileChooser); 
     } 

     if (returnVal == JFileChooser.APPROVE_OPTION) { 
      filePath = fileChooser.getSelectedFile(); 
     } 
    } 
} 

Ich würde niemandem sehr dankbar sein, die einen Einblick für das Problem teilen kann ich oder Fehler auftreten Ich habe diese Funktionalität implementiert.

+0

Does'view.getFilePath() 'gibt die gleich' filePath' String Sie am Ende zugewiesen? – MNos

+0

@MNos: Ja, ich initialisierte filePath außerhalb des OceanLifeView-Konstruktors in der OceanLifeView-Klasse, um mit einer Getter-Methode darauf zuzugreifen. – Jub

+0

Können Sie 'System.out.println (" filePath: "+ filePath);' in der ersten Zeile der 'saveObjects' Methode hinzufügen und uns die Ausgabe liefern? – MNos

Antwort

0

Dies sieht so aus, als würden Sie den relativen Dateipfad zum FileOutputStream-Konstruktor übergeben.

Wahrscheinliche Ursache davon ist, dass filePath als filePath = selectedFile.getPath() sollte stattdessen berechnet wird wie folgt berechnet:

File selectedFile = fileChooser.getSelectedFile(); 
String filePath = selectedFile.getAbsolutePath(); 
+0

Doing that wirft mir diesen Fehler: Ausnahme im Thread "AWT-EventQueue-0" java.lang.NullPointerException – Jub

+0

Können Sie einen Teil der Stack-Trace senden - von diesem Kontext verstehe ich nicht genau wo Ausnahme passiert. Meine Vermutung wäre, dass fileChooser nicht initialisiert wird, wenn der Timecode ausgeführt wird - aber ohne Ausnahme Stack-Tracking ist dies nur raten. – river

+0

Okay ... wie es scheint 'String filePath = selectedFile.getAbsolutePath();' speichert den Dateipfad nicht in 'filePath'. Also 'view.getFilePath()' gibt 'null' zurück – Jub