0

我尝试使用 jTable 选择一行并将行值存储到 topicId 中。然后,我使用刚刚获得的 topicId 从数据库中检索数据。这是我的代码。

    jTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent e) {
                if (jTable.getValueAt(jTable.getSelectedRow(), 0) != null) {
                    int topicId = (Integer)jTable.getValueAt(jTable.getSelectedRow(), 0);}
                eForumTopics topics = new eForumTopics(topicId);
                topics.retrieveThread();
                getJFrame().dispose();
                eForumThreadContent myWindow = new eForumThreadContent(topicId);
                myWindow.getJFrame().setVisible(true);
            }
        });

但是,我收到此错误消息。

    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at javax.swing.JTable.getValueAt(Unknown Source)
at kioskeForum.ui.eForumDiscussion$3.mouseClicked(eForumDiscussion.java:295)

第 295 行是那里的 if 语句。我没有看到我的代码有什么问题,因为我没有看到任何数组。有人可以修复它吗?提前致谢。

4

1 回答 1

6

看起来jTable.getSelectedRow()返回-1不是jTable.getValueAt(). 如果未选择 jtable 中的任何行,则可能发生这种情况。

从文档中:

返回第一个选定行的索引,如果没有选择行,则返回 -1。

您应该将您的状况更新为:

if (jTable.getSelectedRow() >= 0 && jTable.getValueAt(jTable.getSelectedRow(), 0) != null) {
于 2012-12-23T12:29:38.077 回答