gpt4 book ai didi

java - 我的数据库应用程序的方法 getValueAt() 返回 "java.lang.IllegalArgumentException: Cannot format given Object as a Number"。为什么?

转载 作者:行者123 更新时间:2023-11-30 09:42:23 25 4
gpt4 key购买 nike

我已经使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com