我的数据库应用程序的getValueAt()方法返回;java.lang.IllegalArgumentException:无法将给定对象格式化为数字;。为什么?

我的数据库应用程序的getValueAt()方法返回;java.lang.IllegalArgumentException:无法将给定对象格式化为数字;。为什么?,java,swing,jdbc,Java,Swing,Jdbc,我已经使用ResultSet通过(JTextLabels EDIT:JTextFields)接受了各种类型的数据输入(整数、双精度、字符串和日期)到我的嵌入式JDBC数据库,并且我正在使用我的自定义AbstractTableModel在swing JTable中显示结果。以下是我的代码片段,我认为问题可能在哪里,但我不确定 public void connectToDB() { try { connection = DriverMa

我已经使用ResultSet通过(JTextLabels EDIT:JTextFields)接受了各种类型的数据输入(整数、双精度、字符串和日期)到我的嵌入式JDBC数据库,并且我正在使用我的自定义AbstractTableModel在swing JTable中显示结果。以下是我的代码片段,我认为问题可能在哪里,但我不确定

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()方法周围,它会生成以下异常,但即使stacktrace也不会指向代码的任何部分

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* ............ 线程“AWT-EventQueue-0”java.lang.IllegalArgumentException中出现异常:无法将给定对象格式化为数字 位于java.text.DecimalFormat.format(DecimalFormat.java:487) at java.text.Format.Format(Format.java:140) 位于javax.swing.JTable$DoubleRenderer.setValue(JTable.java:5315) 位于javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:223) 在javax.swing.JTable.prepareRenderer(JTable.java:5683) 位于javax.swing.JTable.getToolTiptText(JTable.java:3328) ............ *其他人则认为这句话很简洁* ............
我不知道为什么。

你在哪里调用
java.text.DecimalFormat.format()
看看那里传递了什么。不管它是什么,
DecimalFormat
类都无法处理


如果您不直接调用该类和方法,那么步骤调试器是您最好的朋友。在
DecimalFormat.format()
上设置
断点
,并使用步骤调试器查看传入的非法参数。

堆栈跟踪指示问题位于表的呈现器中。
JTable
已决定对该特定值使用
DoubleRenderer
,该值无法解析为
Double
。我建议检查您的实现,并查看它是否为实际上不包含
Double
s的列返回
Double.class
,因为这是用于确定要使用哪个渲染器的方法

这可以在for
JTable
中看到,更具体地说是在
getRenderer
方法的源代码中。参见下面的相关部分(我链接到的源代码中的第3454行)


什么是
JTextLabel
?我在J2SE for Java 7.Lolz中没有看到它。。。cldnt帮助但评论什么?(一年?)lmao!匆忙中犯了严重的打字错误。。。我实际上是指JTextField,myBad!@罗宾-谢谢。我认为你是对的尽管我早些时候找到了一个可供选择的方法,但我还是会按照你的建议去做,看看它是否能给我一个更好的实现。一旦情况好转,我会尽快通知你。你帮了大忙,是的。实际上,我并没有直接调用类方法。罗宾给了我一些建议,我打算和这个步骤一起使用。希望它能起作用。谢谢你的提示!@罗宾-谢谢。我认为你是对的尽管我早些时候找到了一个可供选择的方法,但我还是会按照你的建议去做,看看它是否能给我一个更好的实现。一旦情况好转,我会尽快通知你。你真的帮了大忙。
 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;