我已经使用 ResultSet 通过(JTextLabels 编辑:JTextFields)向我的嵌入式 JDBC 数据库接受了各种类型的数据输入(整数、 double 、字符串和日期),并且我在 swing JTable 中显示结果使用我的自定义 AbstractTableModel。以下是我认为问题可能出在哪里的代码片段,但我不确定;
public void connectToDB()
{
try
{
connection = DriverManager.getConnection(DBURL, DBUSERNAME, DBPASSWORD);
statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
connectedToDB = true;
}
catch (SQLException sqlEx)
{
sqlEx.printStackTrace();
}
}
//Overrides AbstractTableModel's getValueAt() method
public Object getValueAt(int row, int column) throws IllegalStateException
{
connectToDB();
if (connectedToDB == false)
throw new IllegalStateException ("Not Connected To database");
else
{
try
{
if ( resultSet.next() == true )
{
resultSet.absolute( row + 1 );
return resultSet.getObject( column + 1 );
}
}
catch (SQLException sqlEx)
{
sqlEx.printStackTrace();
}
}
return "";// returns an empty string Object in case an error occurs above
}
看起来好像在 getValueAt() 方法周围的某个地方,它生成了以下异常,但即使是堆栈跟踪也没有将我指向代码的任何部分;
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Number at java.text.DecimalFormat.format(DecimalFormat.java:487) at java.text.Format.format(Format.java:140) at javax.swing.JTable$DoubleRenderer.setValue(JTable.java:5315) at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:223) at javax.swing.JTable.prepareRenderer(JTable.java:5683) at javax.swing.JTable.getToolTipText(JTable.java:3328) ............ *Others ommitted 4 brevity* ............
我不知道为什么。
最佳答案
堆栈跟踪表明问题出在表格的渲染器中。 JTable
已决定它将为该特定值使用 DoubleRenderer
,并且该值不能解析为 Double
。我建议检查你的 TableModel#getColumnClass
实现并查看它是否为实际上不包含 Double
的列返回 Double.class
,因为这是用于确定要使用哪个渲染器的方法。
这可以在 source code 中看到对于 JTable
,更具体地说是在 getRenderer
方法的源代码中。相关部分见下文(我链接到的源代码中的第 3454 行)
TableCellRenderer renderer = null;
if (columnModel.getColumnCount() > 0)
renderer = columnModel.getColumn(column).getCellRenderer();
if (renderer == null)
{
int mcolumn = convertColumnIndexToModel(column);
renderer = getDefaultRenderer(dataModel.getColumnClass(mcolumn));
}
return renderer;
关于java - 我的数据库应用程序的方法 getValueAt() 返回 "java.lang.IllegalArgumentException: Cannot format given Object as a Number"。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719735/