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 つのコンボボックスがありますが、この例外で何をする必要があるのかわかりません。なぜこの例外がスローされるのか誰かが知っていますか? オブジェクトをシリアル化する方法に何か問題がありますか?