2009-04-21 29 views
0

ねえ、私は、カスタム直列化可能クラスのjava.util.Vector保存する必要があり、このコードがあります。Javaが動作しない機能を保存

if(filename.equals("")){ 
    javax.swing.JFileChooser fc = new javax.swing.JFileChooser(); 
    if(fc.showSaveDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION){ 
     filename = fc.getSelectedFile().toString(); 
    } 
} 
try{ 
    java.io.FileOutputStream fos = new java.io.FileOutputStream(filename); 
    java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); 
    java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos); 
    oos.writeObject((Object)tl.entities); 
    baos.writeTo(fos); 
    oos.close(); 
    fos.close(); 
    baos.close(); 
}catch(java.io.FileNotFoundException e){ 
    javax.swing.JOptionPane.showMessageDialog(this, "FileNotFoundException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE); 
}catch(java.io.IOException e){ 
    javax.swing.JOptionPane.showMessageDialog(this, "IOException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE); 
} 

しかし、保存するとき、それは言って定義されたダイアログのいずれかのエラーを示しています。IOException: Could not save file: null (com.sun.java.swing.plaf.windows.WindowsFileChooserUI)をしてありますがjavax.swing.plaf.basic.BasicListUI.convertModelToRow(BasicListUI.java:1251)

答えて

0

エラーが見つかりました。保存ダイアログスクリプト自体は完全に機能しましたが、ベクターのクラスにはエラーが発生したヌルポインタがありました。

すべての返信をありがとう、私はそれらのいくつかを使用することができます:)

0

でのコマンドラインでNullPointerExceptionは、多分あなたは、ファイル名のためのより良いチェックを行うことができます。

if (filename == null || "".equals(filename)){ 
    javax.swing.JFileChooser fc = new javax.swing.JFileChooser(); 
    if(fc.showSaveDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION){ 
     filename = fc.getSelectedFile().toString(); 
    } 
    if (filename == null || "".equals(filename)) { 
     // Display a message or anything else 
     return; 
    } 
} 
try { 
... 
} 
0

あなたの例外メッセージが明確ではないので、問題が何であるか正確には分かりません。しかし、私はあなたのコードは約2人の発言している:

  1. Aファイル名(またはファイル)のヌル・チェック(romaintazにより示唆されるように)大丈夫でしょう
  2. は、なぜあなたは、そのファイル名にファイルを変更できますか? File-Objectを保持し、ストリームに渡します。
0

コードにはいくつか問題があります。

  • 条件付きでファイル名を設定します。あなたがそれを設定しなければ、あなたはまだそれを使用しようとします。あなたは(無用で、APIを参照してください)ByteArrayOutputStream
  • は、私がコードにお勧めしますが、ストリームへ

を書き込むためのFileObjectを使用することができますしながら、あなたは、バックファイル名にファイルオブジェクトを変換閉じる

  • このような本:

    while(file == null) { // force a file to be choosen 
        javax.swing.JFileChooser fc = new javax.swing.JFileChooser(); 
        if(fc.showSaveDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION) { 
          file = fc.getSelectedFile() 
        } 
        else { 
         javax.swing.JOptionPane.showMessageDialog(this, "No file selected", "Error", javax.swing.JOptionPane.ERROR_MESSAGE); 
        } 
    } 
    
    try{ 
         java.io.FileOutputStream fos = new java.io.FileOutputStream(file); 
         java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); 
         java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos); 
    
         oos.writeObject((Object)tl.entities); 
         baos.writeTo(fos); 
         oos.close(); 
         fos.close(); 
    
    }catch(java.io.FileNotFoundException e){ 
         javax.swing.JOptionPane.showMessageDialog(this, "FileNotFoundException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE); 
    }catch(java.io.IOException e){ 
         javax.swing.JOptionPane.showMessageDialog(this, "IOException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE); 
    } 
    
  • 0

    あなたの問題は、あなたがキャッチしている例外のスタックトレースを示していないため、診断が困難です。

    なぜ、バイト配列をファイルに書き込むために何かをシリアル化してByteArrayOutputStreamにするのですか?何らかの理由でメモリを浪費する必要がありますか?

    +0

    珍しい要件:) – willcodejavaforfood

    関連する問題