尝试使用反序列化从另一个类加载数据



我正在尝试从保存在另一个类中的文本文件加载数据。以下是我用来加载文件加载器并选择我想从中获取数据的文件的代码:

public static Customer browse()
{
    Customer browse = null;
        JFileChooser chooser = new JFileChooser();
        int chooserOption = chooser.showSaveDialog(null);
        chooserOption = JFileChooser.APPROVE_OPTION;
        try {
            File file = new File (chooser.getSelectedFile().getAbsolutePath());
            ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));

        browse = (Customer) input.readObject();
            input.close();
       return browse;
   } catch (IOException ex) {
        System.out.println(ex.getMessage());
    } catch (ClassNotFoundException ex) {
        System.out.println(ex.getMessage());
    }
   return null;
}

这是我用于按钮加载数据的代码:

     Consultant consload = new Consultant();
     this.jTextField4.setText(consload.getConsultantID());
    Customer custload = Customer.browse();
    custload.setCID(consload.ConsultantID);
    this.jTextField4.setText(custload.getCID());

数据是从类顾问保存的,我不需要在类客户中加载它。加载程序正在工作,但是当我选择文件时,出现此错误:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Consultant cannot be cast to Customer
at Customer.browse(Customer.java:162)
at CreateCustomer.jButton1ActionPerformed(CreateCustomer.java:202)
at CreateCustomer.access$400(CreateCustomer.java:11)
at CreateCustomer$5.actionPerformed(CreateCustomer.java:83)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:740)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:699)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:713)
at java.awt.EventQueue$4.run(EventQueue.java:711)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:710)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

你认为我有一些缺失的代码吗?因为在运行代码之前没有错误。

错误非常不言自明:

Consultant cannot be cast to Customer

显然,当您序列化数据时,它被保存Consultant 类的实例,而不是Customer类。因此,当您尝试读取文件时,ObjectInputStream返回的Object返回Consultant,而不是Customer

我认为您应该将调试工作集中在保存过程上,而不是加载过程上。

最新更新