【发布时间】:2015-10-16 17:03:20
【问题描述】:
如上截图;
当用户选择项目和项目名称并单击添加按钮时,会发生以下情况:
- 从 MySQL 数据库中检索到的选定项目、项目名称和成本。
- 显示输入对话框以从用户那里获取数量。
- 点击“确定”到数量输入对话框后,显示输入对话框以获得折扣。
- 点击确定打折输入对话框后,计算总和并显示在总列中。
但随后将ArrayIndexOutOfBound 错误显示为:
java.lang.ArrayIndexOutOfBoundException: 1>=1
然后在选择另一个项目和项目名称并执行上述过程后显示与以下相同的错误:
java.lang.ArrayIndexOutOfBoundException: 2>=2
还将 Qty、Discount、Total 列重置为与最后一行的值相同。
添加按钮动作执行方法;
private void add_btnActionPerformed(java.awt.event.ActionEvent evt) {
int i=0;
int j=0;
String temp = (String) IDcombo.getSelectedItem();
String temp2 = (String) Namecombo.getSelectedItem();
String sql = "select ItemID,ItemName,CostPrice from druginfo where ItemID=?";
try {
pst=conn.prepareStatement(sql);
pst.setString(1, temp);
rs=pst.executeQuery();
addDataToTable(tableSale,DbUtils.resultSetToTableModel(rs));//this method for adding multiple lines in the table
IDcombo.setSelectedItem(null);
Namecombo.setSelectedItem(null);
exptxt.setText(null);
instock.setText(null);
//getting user input for selling qty
String Qty=JOptionPane.showInputDialog("Insert Selling Quantity :");
double sellingqty=Double.parseDouble(Qty);
//getting user input for specific item discount
String discount = JOptionPane.showInputDialog("Insert Item Discount");
double idiscount=Double.parseDouble(discount);
for(j=0;j<100;j++){
double icost =(double) tableSale.getModel().getValueAt(j,2);
System.out.println(icost);
//calculating Gross Total
double grosstotal = (sellingqty*icost)-idiscount;
System.out.println(grosstotal);
for(i=0;i<100;i++){
//setting qty input value to table sale
tableSale.getModel().setValueAt(sellingqty,i, 3);
//setting input value to table sale
tableSale.getModel().setValueAt(idiscount,i, 4);
//setting grosstotal value to table sale
tableSale.getModel().setValueAt(grosstotal,i, 5);
}
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "error "+ex);
ex.printStackTrace();
}
}
这是堆栈跟踪;
java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:664)
at com.bit.project.Newsale.add_btnActionPerformed(Newsale.java:720)
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:664)
at com.bit.project.Newsale.add_btnActionPerformed(Newsale.java:720)
【问题讨论】:
-
您的表中只有 2 行。但您正试图访问 100 行。为什么会这样?这个
for(i=0;i<100;i++){循环是为了什么? -
那个for循环总是会给你
ArrayIndexOutOfBoundsException -
@tenten 错误
1 >= 1表示只有一行,但您正在访问第一个索引行意味着第二行。但是没有第二行。您添加新行是正确的,但是当您调用 @987654331 @单元格应该存在 -
您可能希望将这些循环更改为:
for(j=0; j< model.getRowCount(); j++)。顺便说一句,你为什么要在两个嵌套的 for 循环中做这些工作? -
FastSnail 在我之前做到了 :-)
标签: java swing jtable indexoutofboundsexception