正在线程中获取异常";AWT-EventQueue-0“;java.lang.ArrayIndexOutOfBoundsException:0>;=删除JTable行中的0

正在线程中获取异常";AWT-EventQueue-0“;java.lang.ArrayIndexOutOfBoundsException:0>;=删除JTable行中的0,java,swing,jtable,indexoutofboundsexception,Java,Swing,Jtable,Indexoutofboundsexception,我已经编写了代码来创建具有JDBC连接的swing应用程序。行从包含一些字段的侧面板输入到表中。这些字段被输入数据库,然后显示在JTable上。我还添加了插入、更新和删除逻辑。插入和更新行工作正常。但是当我试图删除该行时,我得到了一个异常 TablePanel.java: package jdbc; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import jav

我已经编写了代码来创建具有JDBC连接的swing应用程序。行从包含一些字段的侧面板输入到表中。这些字段被输入数据库,然后显示在JTable上。我还添加了插入、更新和删除逻辑。插入和更新行工作正常。但是当我试图删除该行时,我得到了一个异常

TablePanel.java:

    package jdbc;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

import com.mysql.cj.xdevapi.Table;

public class TablePanel extends JPanel {
    JTable jTable;
    DefaultTableModel dtm = null;
    String[] columns = { "Sno", "Sname", "Batch", "Trainer", "Score", "Update", "Delete" };
    Object[][] rows = null;
    JScrollPane jp;
    Connection con;
    Statement stmt;
    static SidePanel sp;
    public TablePanel() throws SQLException {
        super();
        dtm = new DefaultTableModel(rows, columns);
        this.jTable = new JTable(dtm);

        Dimension dim = new Dimension(600, 1000);
        setLayout(new BorderLayout());
        this.jp = new JScrollPane(jTable);
        add(jp, BorderLayout.CENTER);
        jTable.getColumn("Update").setCellRenderer(new ButtonRenderer());
        jTable.getColumn("Update").setCellEditor(new ButtonEditor(new JTextField("Update")));
        jTable.getColumn("Delete").setCellRenderer(new ButtonRenderer());
        jTable.getColumn("Delete").setCellEditor(new ButtonEditor(new JTextField("Delete")));
        jp.setSize(600, 600);
        con = ConnectionObj.getConnection();
        displayTable();
        setVisible(true);
    }

    public void displayTable() throws SQLException {
        dtm.getDataVector().removeAllElements();
        dtm.fireTableDataChanged();
        stmt = con.createStatement();
        String sql;
        sql = "SELECT * FROM student";
        ResultSet rs = stmt.executeQuery(sql);

        String arr[] = new String[7];
        int flag =0;
        while(rs.next()){
        //  System.out.println(rs.getString(i)+"hello\n");
            for(int i=1;i<=5;i++)
            {arr[i-1] = rs.getString(i);
            flag++;
            }if(flag == 5){
                arr[5] = "Update";
                arr[6] = "Delete";
                dtm.addRow(arr);
                flag=0;
                }
        }


    }

    public void insertRow(Object[] arr) throws SQLException
    {

        String sql,select_sql;
        select_sql = "SELECT sno FROM student where sno = ?";
        PreparedStatement psmt1 = con.prepareStatement(select_sql);
        psmt1.setString(1, (String)arr[0]);
        ResultSet rs1 = psmt1.executeQuery();
        if(rs1.next()){
            System.out.println(rs1.getString(1));
            updateRow(arr);
        }
        else{
        sql = "Insert into student values (?, ?, ?, ?, ?) ";
        PreparedStatement psmt = con.prepareStatement(sql);
        psmt.setString(1, (String)arr[0]);
        psmt.setString(2, (String)arr[1]);
        psmt.setString(3, (String)arr[2]);
        psmt.setString(4, (String)arr[3]);
        psmt.setString(5, (String)arr[4]);
        psmt.execute();
        }
        sp.clearText();
        displayTable();
    }
    public void setSidePanel(SidePanel sp){
        this.sp = sp;
    }
    public void updateRow(Object arr[]) throws SQLException{
//      int num = Integer.parseInt(arr[0]);
        String str = (String)arr[0];
        System.out.println(str+" hi ");
        stmt = con.createStatement();
        String sql;
        sql = "UPDATE student SET sno=?, sname = ?,batch = ?,trainer = ?,score = ? where sno = ?";
        PreparedStatement psmt = con.prepareStatement(sql);
        psmt.setString(1, (String)arr[0]);
        psmt.setString(2, (String)arr[1]);
        psmt.setString(3, (String)arr[2]);
        psmt.setString(4, (String)arr[3]);
        psmt.setString(5, (String)arr[4]);
        psmt.setString(6, str);
        psmt.execute();
//      displayTable();
    }

    public void deleteRow(int rows2) throws SQLException {
        System.out.println("in delete");
        stmt = con.createStatement();
        String sql;
        int count=0;
        String id = null;
        sql = "SELECT * FROM student";
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next())
        {
            System.out.println(rs.getString(1));
            if(count==rows2)
                {
                 id = rs.getString(1);

                break;
                }
            count++;    
        }

        String sql2="Delete from student where sno='"+id+"'";
        stmt.execute(sql2);
        displayTable();

    }

}

class ButtonRenderer extends JButton implements TableCellRenderer {

    public ButtonRenderer() {

        setOpaque(true);

    }

    public Component getTableCellRendererComponent(JTable table, Object value,

            boolean isSelected, boolean hasFocus, int row, int column) {

        setText((value == null) ? "" : value.toString());
        this.add( new JTextField( value.toString()  ) );
        this.add( new JButton("Update"));
        this.add( new JButton("Delete"));
        return this;

    }
}

class ButtonEditor extends DefaultCellEditor
{
  protected JButton btn;
   private String lbl;
   private Boolean clicked=false;
   public TablePanel tp;
   int rows ;
private boolean clicked2=false;
   public ButtonEditor(JTextField txt) {
    super(txt);

    btn=new JButton();
    btn.setOpaque(true);

    //WHEN BUTTON IS CLICKED
    btn.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {

        fireEditingStopped();
      }
    });
  }

   //OVERRIDE A COUPLE OF METHODS
   @Override
  public Component getTableCellEditorComponent(JTable table, Object obj,
      boolean selected, int row, int col) {

      //SET TEXT TO BUTTON,SET CLICKED TO TRUE,THEN RETURN THE BTN OBJECT
     lbl=(obj==null) ? "":obj.toString();
     btn.setText(lbl);
     if(lbl.equals("Update"))
     clicked=true;
     else
         clicked2=true;
     rows = row;
     System.out.println(row+" "+col);
    return btn;
  }

  //IF BUTTON CELL VALUE CHNAGES,IF CLICKED THAT IS
   @Override
  public Object getCellEditorValue() {

     if(clicked)
      {
      //SHOW US SOME MESSAGE
       try {
           System.out.println("update");
        TablePanel.sp.updatetextPanel(rows);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      }

     if(clicked2)
     {
         try {
             System.out.println("helll");
            TablePanel.sp.deleteRowPanel(rows);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     }
    //SET IT TO FALSE NOW THAT ITS CLICKED
    clicked=false;
    clicked2=false;
    return new String(lbl);
  }

   @Override
  public boolean stopCellEditing() {

         //SET CLICKED TO FALSE FIRST
      clicked=false;
    return super.stopCellEditing();
  }

   @Override
  protected void fireEditingStopped() {
    // TODO Auto-generated method stub
    super.fireEditingStopped();
  }

   public void setTable(TablePanel tp){
       this.tp = tp;
   }
}

如何纠正这个错误?我犯了什么错误?我无法理解这里的错误是什么?请帮忙。提前感谢。

不,它不起作用。可能是@Alien的副本,但这对@Alien没有帮助,问题仍然存在。要尽快获得更好的帮助,请发布或。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.setValueAt(Unknown Source)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at jdbc.ButtonEditor.fireEditingStopped(TablePanel.java:266)
at jdbc.ButtonEditor$1$1.run(TablePanel.java:198)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)