当前位置: 首页 > 知识库问答 >
问题:

序列化 Jtable

申屠晟
2023-03-14

我有一个程序,基本上创建一个JTable和JButton。我尝试的是,当我按下按钮时,它会将JTable的数据保存到一个文件中。当我按下它时,它抛出一个错误:

class Demo extends AbstractTableModel
{

    String[] colum = {"first", "Second", "Third"};
    
    Object[][] rowData = {{"Name", 21, "Garzon"},{"Matew", 31, "Herliya"},{"Paul", 24, "Illonis"}};
    
    @Override
    public int getColumnCount()
    {
        return colum.length;
    }

    @Override
    public int getRowCount()
    {
        return rowData.length;
    }

    @Override
    public Object getValueAt(int row, int col)
    {
        return rowData[row][col];
        
    }
    
    public boolean isCellEditable(int row, int col)
    {
        if(col <3)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public void setValueAt(Object value, int row, int col)
    {
        rowData[row][col] = value;
    }
    

}

public class AbstractTableDemo extends JFrame
{
    public AbstractTableDemo()
    {
        setSize(400, 400);
        setLayout(null);
        
        Demo demo = new Demo();
        JTable t = new JTable(demo);
        t.setModel(demo);
        
        JScrollPane sc = new JScrollPane(t);
        sc.setBounds(0, 0, 220, 150);
        add(sc);
        
        JButton b = new JButton("save");
        b.setBounds(0, 200, 100, 30);
        b.addActionListener(new ActionListener()  //Right here i implemente a button which takes the dta from jtable to sav it into a file

        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                
                try
                {
                    DefaultTableModel model = (DefaultTableModel)t.getModel();
                    ObjectOutputStream fileOut = new ObjectOutputStream(new FileOutputStream("C:/Users/Harry/Desktop/clients.txt"));
                    fileOut.writeObject(model);
                    fileOut.close();
                    System.out.println("Write done");
                
                } catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        });
        add(b);
        
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            
            @Override
            public void run()
            {
                new AbstractTableDemo();
            }
        });
    }
}

当我运行代码时,会抛给我一个:

线程中的异常"AWT-EventQuue-0"java.lang.ClassCast异常:不能将Demo转换为javax.swing.table.DefaultTableModel

at AbstractTableDemo$1.actionPerform(AbstractTableDemo.java:87)

我该如何解决这个问题?

共有1个答案

拓拔浩阔
2023-03-14
class Demo extends AbstractTableModel

您的类< code>Demo扩展了< code>AbstractTableModel,而不是< code>DefaultTableModel,因此当您进行强制转换时...

(DefaultTableModel)t.getModel();

...抛出异常(< code>DefaultTableModel是< code>AbstractTableModel的子类)。对< code>AbstractTableModel进行适当的转换,或者完全避免转换并使用返回的< code>TableModel。

AbstractTableModel model = (AbstractTableModel)t.getModel();
//or just 
//TableModel model = t.getModel();

话虽如此,最好在不需要序列化的情况下保存行/列数据(例如CSV/选项卡交付文件),以获得更好的跨应用程序兼容性。

 类似资料:
  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并

  • 问题内容: 我注意到存储在Redis中的某些序列化对象在反序列化方面遇到问题。 当我对Redis中存储的对象类进行更改时,通常会发生这种情况。 我想了解问题,以便为解决方案设计一个清晰的方案。 我的问题是,什么导致反序列化问题?移除公共/私人财产会引起问题吗?也许添加新属性?向类添加新功能会产生问题吗?那么更多的构造函数呢? 在我的序列化对象中,我有一个属性Map,如果我更改(更新了一些属性,添加

  • 问题内容: Golang中将结构序列化和反序列化为字符串的最佳方法(完整性和性能)是什么,反之亦然? 例如,如果我有这个结构: 我想将其存储在Redis上并取回。我试过保存,整型和字符串,这很好,但是如何存储结构对象? 问题答案: 使用gob和base64可以解决问题,例如: 当您需要序列化自定义结构或类型(例如struct)时,只需添加以下行:

  • 主要内容:1 Java序列化和反序列化,2 Java序列化的优点,3 java.io.Serializable接口,4 Java ObjectOutputStream,5 Java ObjectInputStream,6 Java序列化的例子,7 Java反序列化的例子1 Java序列化和反序列化 Java中的序列化是一种将对象状态写入字节流的机制。它主要用于Hibernate,RMI,JPA,EJB和JMS技术。 序列化的反向操作称为反序列化,其中字节流被转换为对象。序列化和反序列化过程与平台

  • FAQs in section [36]: [36.1]“序列化”是什么东东? [36.2] 如何选择最好的序列化技术? [36.3] 如何决定是要序列化为可读的(“文本”)还是不可读的(“二进制”)格式? or non-human-readable ("binary") format?") [36.4] 如何序列化/反序列化数字,字符,字符串等简单类型? [36.5] 如何读/写简单类型为可读的