簡體   English   中英

Jtable ArrayIndexOutOfBounds異常-1

[英]Jtable ArrayIndexOutOfBounds Exception -1

我使用java netbeans開發了系統,其中的內部有一個JTable。 每當我啟動程序時,我的JTable都會顯示來自sqlite的所有數據。 然后,當我用鼠標單擊數據時,它將在我的JtextField中顯示詳細信息。 我也有一個菜單欄。 一切正常,除非每次我啟動系統時都啟動鼠標,如果我沒有用鼠標單擊我的JTable,而是直接在菜單欄中玩然后按jtable,它將顯示錯誤。 ArrayIndexOutOfBoundsEception -1。 僅當我提到時,才會發生此異常。 除此之外,如果我再次單擊鼠標,那就可以了。 我只是想知道如何解決這個問題

我有打印堆棧,下面是錯誤:

java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementData(Vector.java:730)
at java.util.Vector.elementAt(Vector.java:473)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649)
at Customer.table_customerMouseClicked(Customer.java:703)
at Customer.access$500(Customer.java:23)
at Customer$6.mouseClicked(Customer.java:377)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6508)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

這是我的代碼,用於從sqlite加載數據並將其顯示在JTextField中

 private void table_customerMouseClicked(java.awt.event.MouseEvent evt) {                                            
   conn=javaconnect.ConnectDB();



   panel_1.setVisible(false);

   txt_custname.setEditable(false);
   ComboBox1.setEditable(false);
   txt_proID.setEditable(false);
   txt_pricePer.setEditable(false);
   txt_quantity1.setEditable(false);
   txt_total.setEditable(false);
   txt_email.setEditable(false);
   txt_company.setEditable(false);

   cmd_delete.setEnabled(true);
   cmd_edit.setEnabled(true);

   try{
   int row = table_customer.getSelectedRow();
   String table_click = (table_customer.getModel().getValueAt(row, 0).toString());
   String sql ="select* from Customer where CustID='"+table_click+"' ";
   pst = conn.prepareStatement(sql);
   rs=pst.executeQuery();

   if(rs.next()){
   String add1 = rs.getString("Name");
   txt_custname.setText(add1);

   String add2 = rs.getString("Email");
   txt_email.setText(add2);  

   String add3 = rs.getString("Company");
   txt_company.setText(add3);

   String add4 = rs.getString("ProductName");
   ComboBox1.setSelectedItem(add4); 

   String add5 = rs.getString("ProID");
   txt_proID.setText(add5);

   String add6 = rs.getString("PricePerUnit");
   txt_pricePer.setText(add6);

   String add7 = rs.getString("Quantity");
   txt_quantity1.setText(add7); 

   String add8 = rs.getString("Total");
   txt_total.setText(add8);

   String add9 = rs.getString("CustID");
   txt_custID.setText(add9);

    }

   String sql1= "select * from Product where Name = '"+ComboBox1.getSelectedItem()+"'";   
   pst = conn.prepareStatement(sql1);

   rs=pst.executeQuery();

   if (rs.next()){
   String add1 = rs.getString("ProID");
   txt_proID.setText(add1);

   String add2 = rs.getString("PricePerUnit");
   txt_pricePer.setText(add2);

   String add3 = rs.getString("Quantity");
   txt_quantity.setText(add3);

   String add4 = rs.getString("StockOut");
   txt_stock.setText(add4);
   }


   }

   catch(Exception e){
   e.printStackTrace();
   }

   finally{
   try{
   rs.close();
   pst.close();
   conn.close();
   }
   catch(Exception e){}
   }
}      

當在JTable中沒有選擇任何行時調用mouseClicked函數時,就會發生問題。 在這種情況下,

 row = table_customer.getSelectedRow();

如果未選擇任何行,將返回-1 之后,您正在做

table_customer.getModel().getValueAt(row, 0)

這顯然會引發ArrayIndexOutOfBoundsException異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM