有 Java 编程相关的问题?

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

java ArrayIndexOutOfBoundsException=0

Got DBTableHeaderFill Error: ArrayIndexOutOfBoundsException = 0

我也不明白,为什么会出现

col是11,因为表有12个标题,我们知道计数从0开始

我知道它看起来很原始,但我只是在调试问题。。。 JOptionPane用于查看哪些有效,哪些无效,我不知道数组有什么问题

    Object rows[][] = new Object[row][col];
    Object columns [] = new Object[col];
    row = 1;
    col = 11;
    JTable table = new JTable(rows, columns);
    scrollPane.setViewportView(table);
    /*
     *  DataBase Headers
     */
    try{
        conn = DBConnection.DBConnector();
        JOptionPane.showMessageDialog(null, "Connection");
        Statement st = conn.createStatement();
        JOptionPane.showMessageDialog(null, "Statement");
        rs = st.executeQuery("SELECT * FROM Query1");
        JOptionPane.showMessageDialog(null, "Query1 load");
        ResultSetMetaData rsmd = rs.getMetaData();
        JOptionPane.showMessageDialog(null, rsmd);
        int columnCount = rsmd.getColumnCount();
        JOptionPane.showMessageDialog(null, columnCount);
        JOptionPane.showMessageDialog(null, "test " + col);
        // The column count starts from 0
        for (int i = 1; i < columnCount + 1; i++ ) {
            columns[i-1] = rsmd.getColumnName(i);
            JOptionPane.showMessageDialog(null, "result: " + o);
            JOptionPane.showMessageDialog(null, "Header" + columns[i-1]);
          // Writes headers
        }
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "DBTableHeaderFill Error: " + e);
    }

在数组之前分配col和row值时,会出现以下错误:

java.lang.NullPointerException at javax.swing.JTable$1.getColumnName(Unknown Source) at javax.swing.JTable.addColumn(Unknown Source) at javax.swing.JTable.createDefaultColumnsFromModel(Unknown Source) at javax.swing.JTable.tableChanged(Unknown Source) at javax.swing.JTable.setModel(Unknown Source) at javax.swing.JTable.(Unknown Source) at javax.swing.JTable.(Unknown Source) at javax.swing.JTable.(Unknown Source) at Main.initialize(Main.java:199) at Main.(Main.java:65) at Main$1.run(Main.java:34) at java.awt.event.InvocationEvent.dispatch(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$300(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$1.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)

所以我发现了我的问题

JTable table = new JTable(rows, columns);
scrollPane.setViewportView(table);

这需要在阵列的末尾


共 (2) 个答案

  1. # 1 楼答案

    在使用行/列值创建数组后,似乎正在初始化行/列值:

    Object rows[][] = new Object[row][col];
    Object columns [] = new Object[col];
    row = 1;
    col = 11;
    

    这可能是:

    row = 1;
    col = 11;
    Object rows[][] = new Object[row][col];
    Object columns [] = new Object[col];
    

    col应该是表中的确切列数,否则创建的数组只有11个元素,而不是12个元素

  2. # 2 楼答案

    变量col设置在以下位置之后:

    Object columns [] = new Object[col];
    

    在这行之前,col的值是多少? 如果为0,则这将解释您得到的错误:

    Got DBTableHeaderFill Error: ArrayIndexOutOfBoundsException = 0