2016-07-03 3 views
0

私は現在プロジェクトで作業しており、ユーザがJFileChooserの助けを借りて選択した場所にObjectOutputStreamというファイルにオブジェクトを保存したいとします。しかし、オブジェクトは常にプログラムのルートディレクトリに "null"というファイル(%ProjectDirectory%/null)に保存されます。ここでfilePath from JFileChooserはnullです

は、ファイルにオブジェクトのLinkedListを節約する私の方法saveObjects、です:

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); 
    } 
} 

この命令は、filePathはStringです(パラメータとしてfilepathと方法saveObjectを呼び出し、私はすでに使用してみましたファイル)

saveObjects(view.getFilePath()); 

viewOceanLifeViewview.getFilePath()のインスタンスでは、そのクラスのゲッターメソッドでありますファイルを(Stringとして)保存するパスを返します。

getFilePath()は次のようになります。

public String getFilePath() { 
    return filePath; 
} 

そして、このように私のOceanLifeView:

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(); 
     } 
    } 
} 

私が遭遇した問題や間違いのためのいくつかの洞察を共有することができます誰にも非常に感謝するでしょう私はこの機能を実装しました。

+0

Does'view.getFilePath() 'あなたが最後に割り当てられた同じ' filePath'文字列を返します。その

考えられる原因は、filePathにはfilePath = selectedFile.getPath()のように計算される代わりに、それはこのように計算されなければならないということですか? – MNos

+0

@MNos:OceanLifeViewクラスのOceanLifeViewコンストラクタの外側でfilePathを初期化して、getterメソッドでアクセスしました。 – Jub

+0

'saveObjects'メソッドの最初の行に' System.out.println( "filePath:" + filePath);を追加して、出力を提供できますか? – MNos

答えて

0

これは、ファイルパスをFileOutputStreamコンストラクタに渡すかのように見えます。

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

スレッド「AWT-EventQueue-0」の例外 – Jub

+0

このコンテキストからスタックトレースの一部を送信できますか?起こりました。私の推測では、fileChooserはタイムコードが実行されたときに初期化されないだろうが、例外なくスタックトレースを推測するだけである。 – river

+0

OK ...それはseam 'String filePath = selectedFile.getAbsolutePath();'はファイルパスを 'filePath'に保存しません。したがって、 'view.getFilePath()'は 'null'を返します – Jub

関連する問題