2

それを説明する方法を考えることはできません。基本的に、メソッドを記述して現在のオブジェクトをデコードされたシリアル化されたXMLにすることができるかどうか疑問に思っています。

現在のTillオブジェクトの状態に一致するXMLファイルを生成するため、saveTillXMLが機能することはわかっています[ただし、デコードが失敗するため、実際に機能するかどうかはわかりません]。ただし、loadTillXML()メソッドを呼び出すと、次の例外が発生します。

  • java.lang.reflect.InvocationTargetException
  • java.lang.IllegalStateException
  • java.lang.ArrayIndexOutOfBoundsException

ウィンドウを閉じたときにsaveTillXML()メソッドを呼び出し、TillのコンストラクターでloadTillXMLメソッドを呼び出します。

私は、Tillと、Tillが使用するすべてのクラスに、すべてのget&setsと引数のないコンストラクターを持っています。

public void saveTillXML() throws IOException{
    XMLEncoder encoder=new XMLEncoder(new BufferedOutputStream(new FileOutputStream("till.xml")));
    encoder.writeObject(this);
    encoder.close();        
}

public static void loadTillXML() throws IOException{
    XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("till.xml")));
    decoder.readObject();       
    decoder.close();
}

私が考えることができる唯一のことは、decoder.readObject()何も入らないという事実です。これは、現在のインスタンスをデコードするXMLにしたい場合におそらくそうなるはずです。

前もって感謝します。

4

1 に答える 1

0

さて、私は自分の問題をなんとか解決することができました。loadTillXMLにはreturnメソッド(Till)が必要でした。これにより、Tillの外部で呼び出す必要があると考えるようになりました。private Till till=new Till();だから私は窓の代わりにそれを使いました。

作業方法:

public static Till loadTillXML() {
    try{
        XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("till.xml")));
        return (Till) decoder.readObject();     
    }
    catch(FileNotFoundException fNFE){
        System.out.println("Cannot find file");
        Till till=new Till();
        return till;
    }
}
于 2012-04-28T21:57:54.573 に答える