有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正在删除我的JTable上的数据。ArrayIndexOutOfBoundsException:0

每次删除/添加JTable时,我都会出错。它成功地删除了该行,但每当我再次填充我的表my calling table_order()时,它就会显示错误。但当我更新它的时候,它工作得很好。不明白为什么只是个初学者

以下是我删除按钮的代码:

    String codev = code.getText();
    String namev = name.getText();
    String pricev = price.getText();
    String descv = desc.getText();


    try{
        conn = ConnectionDB.connectDB();
        String sql = "SELECT * FROM items WHERE item_code = '"+codev+"'";
        ps=conn.prepareStatement(sql);
        rs=ps.executeQuery();

        if(codev.equals("") || namev.equals("") ||pricev.equals("") || descv.equals("") || check.equals("")){
            JOptionPane.showMessageDialog(null, "Please fill up all fields.", "ERROR", JOptionPane.ERROR_MESSAGE);
        }

        else if(rs.next()){

           ps = conn.prepareStatement("DELETE FROM items WHERE item_code='"+codev+"'");
           int row = ps.executeUpdate();

                if(row == 1){
                    JOptionPane.showMessageDialog(this, "Item successfully deleted.", "SUCCESS", JOptionPane.INFORMATION_MESSAGE);
                    table_item.removeAll();
                    table_order();
                    reset();
                }  
        }

        else{
            JOptionPane.showMessageDialog(null, "Item doesnt exist. Please select item.", "ERROR", JOptionPane.ERROR_MESSAGE);              
       }

    }

    catch(SQLException | HeadlessException ex){
            System.out.println(ex);
    }

表8顺序:

    Queryy mq = new Queryy();
    ArrayList<Product> list = mq.BindTable();
    String[] columnName = {"Code","Name","Price","Description","Availability","Icon"};
    Object[][] rows = new Object[list.size()][6];


    for(int i = 0; i < list.size(); i++){
        rows[i][0] = list.get(i).getID();
        rows[i][1] = list.get(i).getName();
        rows[i][2] = list.get(i).getPrice();
        rows[i][3] = list.get(i).getDesc();
        rows[i][4] = list.get(i).getAvail();

        if(list.get(i).getMyImage() != null){

         ImageIcon image = new ImageIcon(new ImageIcon(list.get(i).getMyImage()).getImage()
         .getScaledInstance(150, 75, Image.SCALE_SMOOTH) );   

        rows[i][5] = image;
        }
        else{
            rows[i][4] = null;
        }

    }

    Modell model = new Modell(rows, columnName);
    table_item.setModel(model);
    table_item.setRowHeight(85);
    table_item.getColumnModel().getColumn(2).setPreferredWidth(45);
    table_item.getColumnModel().getColumn(3).setPreferredWidth(140);
    table_item.getColumnModel().getColumn(4).setPreferredWidth(45);
    table_item.getColumnModel().getColumn(5).setPreferredWidth(140);

它显示了我的模型类中的错误:

public Modell(Object[][] data, String[] columnName){
    this.rows = data;
    this.columns = columnName;
}

@Override
public Class getColumnClass(int column){
    if (column == 6){
        return Icon.class;
    }

    else{
        return getValueAt(0, column).getClass();
    }
}

/**
 *
 * @return
 */
@Override
public int getRowCount(){
    return this.rows.length;
}

/**
 *
 * @return
 */
@Override
public int getColumnCount(){
    return this.columns.length;
}

/**
 *
 * @param rowIndex
 * @param columnIndex
 * @return
 */
@Override
public Object getValueAt(int rowIndex, int columnIndex){
    return this.rows[rowIndex][columnIndex];
}

/**
 *
 * @param col
 * @return
 */
@Override
public String getColumnName(int col){
    return this.columns[col];
}

}

错误:

Exception in thread "AWT-EventQueue-0" 
java.lang.ArrayIndexOutOfBoundsException: 0
at orderingmanagementsystem.Modell.getValueAt(Modell.java:63)
at orderingmanagementsystem.Modell.getColumnClass(Modell.java:33)
at javax.swing.JTable.getColumnClass(JTable.java:2698)
at javax.swing.JTable.getCellRenderer(JTable.java:5674)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:682)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:580)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:364)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:275)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at orderingmanagementsystem.Modell.getValueAt(Modell.java:63)
at orderingmanagementsystem.Modell.getColumnClass(Modell.java:33)
at javax.swing.JTable.getColumnClass(JTable.java:2698)
at javax.swing.JTable.getCellRenderer(JTable.java:5674)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:682)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:580)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:364)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:275)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JViewport.paint(JViewport.java:728)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent.paint(JComponent.java:1042)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1975)
at java.awt.Window.paint(Window.java:3904)
at javax.swing.RepaintManager$4.run(RepaintManager.java:842)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

共 (1) 个答案

  1. # 1 楼答案

    你写的for循环

    for(int i = 0; i < list.size(); i++){....}
    

    把这个换成

    for(int i = 0; i< list.size()-1;i++){.....}
    

    我希望这能奏效