当前位置: 首页 > 知识库问答 >
问题:

如何解决java.lang.ClassCastException错误

窦凯定
2023-03-14

我已经在swingeclipse的JTable属性中设计了默认的表模型。所以当我尝试进行计算时,会出现错误……线程“AWT-EventQueue-0”java.lang.ClassCastException:java.lang.String无法转换为java.lang.Integer

public class punchingPBill extends JFrame
{
    DefaultTableModel model;
    Double rate,discount,amount,exciseduty,outputvat;

    {
        String[] columnNames =  {"Sr.No", "Description Of Goods", "quantity", "Rate", "Per", "Discount", "Basic Excise Duty", "Output Vat", "Amount"};
        Object[][] data = { {new Integer(1),"",new Integer(1), new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0)}};

    model = new DefaultTableModel(data, columnNames);
    }       
        table.setModel(model);
        table.setRowHeight(25);

private void setTableModelListener()
    {
        System.out.println("enter listen");
        TableModelListener tableModelListener = new TableModelListener() 
{
         public void tableChanged(TableModelEvent e)
            {
               if (e.getType() == TableModelEvent.UPDATE)
                {
                    System.out.println("Cell " + e.getFirstRow() + ", "
                            + e.getColumn() + " changed. The new value: "
                            + table.getModel().getValueAt(e.getFirstRow(),
                                    e.getColumn()));
                    int row = e.getFirstRow();
                    int column = e.getColumn();

                    if(column == 2||column == 3||column == 5)
                    {
                     Integer    quantity = ((Integer) model.getValueAt(row, 2)).intValue();
                   rate = ((Double) model.getValueAt(row, 3)).doubleValue(); 
                   discount=((Double) model.getValueAt(row, 5)).doubleValue();
                   amount=new Double(rate-(quantity*rate*(discount/100)));

                   model.setValueAt(amount, row, 8);

                 }

                }
            }
        };
        table.getModel().addTableModelListener(tableModelListener);
}

在-Integer quantity =((Integer)model . getvalue at(row,2))处出错。int value();.......rate =((Double)model . getvalueat(row,3))。double value();......discount =((Double)model . getvalue at(row,5))。double value();

共有3个答案

夏景同
2023-03-14

你忘了告诉我们当你改变这个值时会发生这种情况。

由于您正在编辑该值,因此它使用 JTextComponent(最有可能是 JTextField)来获取值(显示光标的单元格),因此 JTextComponent.getText() 的结果是字符串,而不是整数。所以你需要用 来解析值:

Integer.parseInt(string)

当然,如果您输入非整数值,这将引发异常。

编辑:如果打印类型更改,您可以看到类型更改:

System.out.println(model.getValueAt(row, 2));
System.out.println(model.getValueAt(row, 2).getClass());

在你更新它之前,它会输出

1
Integer

输入任何内容后(假设 2)

2
String

这里有一种方法可以确保在编辑之前和之后都能正常工作:(使用正确的格式输入,如果输入字母值,则无法正常工作)

if (column == 2 || column == 3 || column == 5) {
    Integer quantity = Integer.parseInt(model.getValueAt(row, 2).toString());
    rate = Double.parseDouble(model.getValueAt(row, 3).toString());
    discount = Double.parseDouble(model.getValueAt(row, 5).toString());
    amount = new Double(rate - (quantity * rate * (discount / 100)));

    model.setValueAt(amount, row, 8);
}

解决方案是管理编辑以直接解析值,但这需要更多代码

韦澄邈
2023-03-14

我假设下面的行抛出这个异常

Integer    quantity = ((Integer) model.getValueAt(row, 2)).intValue();

尝试调试从model.getValueAT(row,2)返回的内容,如果它返回String,则需要使用:

Integer.parseInt(returnedValueFromMethodCall);
裴华荣
2023-03-14

您可以使用 Integer.parseInt(“StringValue”) 代替强制转换,其中 “StringValue” 应该是一个可以转换为 Integer 的正确数字值

 类似资料:
  • 问题内容: 我们正在尝试使用VScode将代码部署到FRC机器人,但我们不断收到错误消息: 错误:找不到或加载主类 org.gradle.wrapper.GradleWrapperMain 原因:java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain 终端进程终止,退出代码为:1 我们发现其他人也遇到了类似的错误

  • 问题内容: 我连接了VPN,以设置广告资源API来获取产品列表,并且效果很好。一旦我从Web服务获得结果并绑定到UI。当我遇到付款错误时,我也将PayPal与我的make Express结帐应用程序集成在一起。我将servlet用于后端过程。谁能说出解决此问题的方法? 问题答案: 首先,你需要从尝试连接的服务器获取公共证书。这可以通过多种方式完成,例如联系服务器管理员并提出要求,使用OpenSSL

  • 我在上传Excel文件大小更1MB时出错。 我试图通过应用以下配置更改来修复它,但没有一个对我有帮助。 在应用程序中尝试配置。yml文件: 我还尝试了以下注释: 最后我做了这个改变: 但是什么都没用!

  • CoreException:无法计算生成计划:插件org.apache.maven.Plugin:3.1或其依赖项之一无法解析:无法读取org.apache.maven的工件描述符。plugins:maven-compiler-plugin:jar:3.1:ArtifactResolutionException:无法将工件org.apache.maven.Plugin.plugins:maven-

  • 我试图添加google_mobile_ads,版本1.0.0通过以下步骤中提到的答案:https://stackoverflow.com/a/67883550/13240914,但当我在调试模式下运行应用程序,我得到这个错误: 有什么方法可以解决这个问题吗?这里是android/app/build.gradlehttps://gist.github.com/wahyu-handayani/025c

  • 问题内容: 我在下一行出现错误。我正在做添加到jsonarray的过程。请帮我。 问题答案: 这是我在重新编程时经常遇到的错误。此异常的原因或细节非常清楚。不允许在迭代时修改集合(正在添加新元素)。至少不支持语法。 为了解决您的问题,我认为有两种方法很简单。 1)。而不是使用语句来循环,更好的方法是使用迭代器来避免ConcurrentModificationException。 2)。在循环播放时