java.lang.Object无法转换为int。

4

我在下载JTable中的数字时遇到了问题。在Eclipse中,我有jre JavaSE 1.7,并且一切正常。我在IntelliJ IDEA中打开了我的项目并选择了SDK java jdk 1.8。

private int;
public void tableEdit(final JTable table) {

        table.getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {
                // TODO Auto-generated method stub
                if (table.getCellEditor() != null) {

                    int col = table.getSelectedColumn();
                    id =  (int)table.getValueAt(table.getSelectedRow(), 0); //ERROR

错误:

java: incompatible types: java.lang.Object cannot be converted to int

编辑:

新的问题: 我有一个JTable,其中有两个字段:ID和field2(combobox)。在从combobox中选择值后,希望能够从ID字段中检索值,以便知道需要更新哪一行。

categoryBox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent event) {
                if (newrow_flag == 0) {
                    JComboBox comboBox = (JComboBox) event.getSource();
                    Object item = event.getItem();
                    if (event.getStateChange() == ItemEvent.SELECTED
                            && box_flag_category > 0) {

                        Category selected_category = (Category) categoryBox
                                .getSelectedItem();

                        int rowid = Integer.getInteger(itemTable.getValueAt(
                                itemTable.getSelectedRow(), 0).toString()); //Error

                        id_category = selected_category.getId();


                        fireItemEvent(new ItemsEvent(rowid, "produkty", null,
                                null, null, id_category, id_company, "update"),
                                "box_category");

                    }
                    box_flag_category++;
                }
            }
        });

出现错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.magazyn.view.View$9.itemStateChanged(View.java:659)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1327)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
    at javax.swing.JComboBox.setSelectedItem(JComboBox.java:576)
    at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)
    at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:834)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    at java.awt.Component.processMouseEvent(Component.java:6527)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    [...]

错误指向这一行:
int rowid = Integer.getInteger(itemTable.getValueAt(
                                itemTable.getSelectedRow(), 0).toString());

1
为了更快地获得帮助,请发布一个SSCCE/MCVE短的可运行、可编译的代码,其中包含JTable/JComboBox的硬编码值在本地变量中。 - mKorbel
3个回答

15

好的,看一下错误:

java: 不兼容的类型:无法将 java.lang.Object 转换为 int

然后看一下抛出错误的那一行:

id =  (int)table.getValueAt(table.getSelectedRow(), 0);

现在你可以看到,你试图将一个 Object 强制转换成一个 int。这是不被允许的。因此,你需要更加有创意:

int id = Integer.parseInt(table.getValueAt(table.getSelectedRow(), 0).toString()); 

我认为OP想知道为什么他的代码可以在1.7编译器下编译,而在1.8编译器下不能编译。不过这是个好答案,我个人也很想知道原始代码如何在1.7下编译。 - Logar
正确,但我不在这里为 OP 工作。我在这里解决 OP 提出的问题。如果他们自己来解决问题,OP 将会获得更深入的理解。 - christopher
@christopher,当我从ComboBox中选择值时,我会收到错误Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at com.magazyn.view.View$9.itemStateChanged(View.java:659) at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223) at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280) - lukassz
请发布您的代码更改,因为这不是我从这段代码中预期的错误。 - christopher
1
@Logar 这是一个编译器错误,在1.8中已经修复。https://bugs.openjdk.java.net/browse/JDK-8046017 - Jiayun Zhou
显示剩余2条评论

4
我有一个从JTable下载数字的问题。

编辑

回复:

@christopher,当我从ComboBox中选择值时,会出现错误Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at com.magazyn.view.View$9.itemStateChanged(View.java:659) at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223) at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)

  • 不要将JComboBox放入JTable中,请阅读Oracle教程How to use Tables - Using a Combo Box as an Editor以获取可工作的代码示例(String实例),模型应仅存储来自JComboBox的初始或最后选择的值作为Editor

  • 直接将数字放入JComboBox / DefaultComboBoxModel中,然后返回数字

  • TableModelListener在CellEditor()== null之后触发事件,那么代码对我没有意义


这是正确的答案,因为他将ComboBox放在单元格内。 - Fevly Pallar

0
查看类 Jtable
public Object getValueAt(int row, int column) {
        return getModel().getValueAt(convertRowIndexToModel(row),
                                     convertColumnIndexToModel(column));
    }

该方法的返回类型为Object

使用Integer.parseInt();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接