2

想不出有什么办法来描述,基本上就是在想能不能写个方法让当前对象变成解码后的序列化XML。

我知道 saveTillXML 可以工作,因为它会生成一个与当前 Till 对象的状态匹配的 XML 文件 [但实际上我不知道它是否有效,因为解码失败]。但是,当我调用 loadTillXML() 方法时,我得到了这些异常:

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

我在窗口关闭时调用 saveTillXML() 方法,并在 Till 的构造函数中调用 loadTillXML 方法。

我在 Till 和 Till 使用的所有类中都有所有获取、设置和无参数构造函数。

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 需要一个返回方法——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 回答