ArrayIndexOutOfBoundsException错误消息

时间:2012-12-23 12:27:01

标签: java sql swing

我尝试选择一行并使用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语句。我没有看到我的代码有什么问题,因为我没有看到任何数组。有人能解决吗?提前谢谢。

1 个答案:

答案 0 :(得分:6)

看起来jTable.getSelectedRow()会返回-1,这不是jTable.getValueAt()的有效参数。如果未选择jtable中的行,则会发生这种情况。

来自文档:

  

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

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

if (jTable.getSelectedRow() >= 0 && jTable.getValueAt(jTable.getSelectedRow(), 0) != null) {