2012-12-23 75 views
0

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

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语句。我没有看到我的代码有什么问题,因为我没有看到任何数组。有人可以修复它吗?提前致谢。

+0

请学习Java命名约定并严格遵守 - _now_ – kleopatra

回答

6

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

从文档:

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

您应该更新您的病情是这样的:

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

是否if语句一样的这些代码? int topicId = jTable.getSelectedRow(); 。我的意思是他们两个都有相同的目的,以获得选定的行数并存储到topicId中? – GabrielHeng

+0

不确定你的意思。我更新了我的答案。 – micha

+0

好吧好的非常感谢。它现在有效。 – GabrielHeng