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

标签 java

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

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类(class)。因此,当您尝试读取该文件时,ObjectObjectInputStream 返回返回 Consultant ,不是Customer .

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

关于java - 尝试使用反序列化从另一个类加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783931/

相关文章:

java - 使用java.time.Instant来表示DateTime而不是OffsetDateTime

java - tomcat - 如何在重定向到错误页面后更改 url

java - TCP_NODELAY 如何影响连续的 write() 调用?

Java原子操作

Java 正则表达式拆分具有未知数量空格的数字

java - Java SE应用程序上带有C3P0的DEADLOCK

java - 如何制作更好的自定义对话框?

java - OpenJPA 查询第二次失败(可能是因为字节数组参数)

java - 没有明确声明泛型类型的赋值如何被滥用?

java - 如何将 STDIO 重定向到 java 应用程序上的 GUI 组件?