这段代码有什么问题?

我用这段代码保存了JTable内容:

 @override public void editingStopped(ChangeEvent ce) { PreparedStatement pstmt = null; try { int row = getEditingRow(); int column = getEditingColumn(); DefaultStyledDocument doc = (DefaultStyledDocument) getCellEditor().getCellEditorValue(); doc.setDocumentFilter(null); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject((DefaultStyledDocument) doc); oos.flush(); byte[] data = bos.toByteArray(); oos.close(); bos.close(); String query = "update BOX_ROWS " + "set COLUMN1= ? " + "where BOX_ID=" + ID + " and INDEX=" + row; pstmt = ReseachAssistantUI.conn.prepareStatement(query); pstmt.setObject(1, data); pstmt.executeUpdate(); doc.setDocumentFilter(new MyDocumentFilter()); } catch (SQLException ex) { Logger.getLogger(MyTable.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); JOptionPane.showMessageDialog(null, "MyTable - " + ex.getMessage()); } catch (IOException ex) { Logger.getLogger(MyTable.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); JOptionPane.showMessageDialog(null, "MyTable - " + ex.getMessage()); } finally { DBUtil.closePreparedStatement(pstmt, MyTable.class.getName()); } super.editingStopped(ce); } 

它在Windows上运行良好。 但是,当我在Mac OS X上运行我的应用程序时,会出现以下消息:

MyTable - com.apple.laf.AquaComboBoxUI

表弹出编辑器在工具栏上确实有2个combobox,但我看不出它们与此exception有什么关系。 有谁知道为什么会抛出这个exception? 序列化对象的方式有问题吗?

编辑结束之后但模型更新之前 ,您似乎试图保留已更改单元格的内容; 这个答案概述了正常的事件顺序。 如您所见,实际编辑器组件可能因平台而异。 而不是重写JTable#editingStopped() ,重写TableModel#setValueAt() ,您可以在其中知道更新的单元格的行,列和类型。 可以在这里和这里找到示例。 此相关示例说明了使用JComboBox作为CellEditor