2012-12-23 123 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