Java 编码及;解码方法所在类中的序列化XML

Java 编码及;解码方法所在类中的序列化XML,java,xml-serialization,Java,Xml Serialization,我想不出一种方法来描述它,基本上我想知道是否有可能编写一个方法,使当前对象成为解码的序列化XML 我知道saveTillXML是有效的,因为它生成了一个与当前Till对象状态匹配的XML文件[但我真的不知道它是否有效,因为解码失败]。但是,调用loadTillXML()方法时会出现以下异常: java.lang.reflect.InvocationTargetException java.lang.IllegalStateException java.lang.ArrayIndexOutOfB

我想不出一种方法来描述它,基本上我想知道是否有可能编写一个方法,使当前对象成为解码的序列化XML

我知道saveTillXML是有效的,因为它生成了一个与当前Till对象状态匹配的XML文件[但我真的不知道它是否有效,因为解码失败]。但是,调用loadTillXML()方法时会出现以下异常:

  • java.lang.reflect.InvocationTargetException
  • java.lang.IllegalStateException
  • java.lang.ArrayIndexOutOfBoundsException
当窗口关闭时,我调用saveTillXML()方法,在Till的构造函数中调用loadTillXML方法

我在Till中以及Till使用的所有类中都有所有get&set和无参数构造函数

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,这可能是应该考虑的


提前谢谢。

好的,我已经设法解决了我的问题。loadTillXML需要一个返回方法-Till,这促使我认为需要在Till之外调用它。所以我用它代替了
private 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;
    }
}

好的,我已经设法解决了我的问题。loadTillXML需要一个返回方法-Till,这促使我认为需要在Till之外调用它。所以我用它代替了
private 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;
    }
}