簡體   English   中英

IndexOutOfBoundsException: 0>=0 僅在使用 vector.removeAllElements() 時

[英]IndexOutOfBoundsException: 0>=0 only when using vector.removeAllElements()

我得到以下代碼:

    public void tryM(String...Zeilen) {
    DefaultTableModel model = new DefaultTableModel();
    table = new JTable();
    model.setColumnIdentifiers(Zeilen);
    table.setModel(model);
    table.setFillsViewportHeight(true);
    table.setDefaultEditor(Object.class, null);

    try {
        Class.forName(driverName);
        Connection con = DriverManager.getConnection(url, userName, password);
        sql = String.format("SELECT rezepte.id, rezepte.NAME, rezeptkategorien.KATNR, kategorien.BESCHREIBUNG\r\n" + "FROM rezepte inner JOIN rezeptkategorien ON rezeptkategorien.REZEPTID = rezepte.id\r\n" + "inner JOIN kategorien ON kategorien.ID = rezeptkategorien.KATNR\r\n" + "WHERE beschreibung=\"%s\"", textvalue);
        PreparedStatement ps = con.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        Array test;
        int i = 0;
        int j =1;
        Vector<String> vector = new Vector<String>();
        while (rs.next()) {

            
            while(j!=Zeilen.length+1) {
                vector.add(rs.getString(j));
                j++;
                System.out.println(vector);
            }               
            model.addRow(vector);
            vector.removeAllElements();
            System.out.println(vector+" test");
            //System.out.println(rs.getString(2));
            i++;
            j=1;

        }

        if (i == 0) {
            amenak = true;
        }

    } catch(Exception ex) {
        JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
    }

我試圖將可變數量的變量添加到向量“向量”中,然后將其添加到 jtable,並再次清除它以再次填充,根據我的 Print 語句,向量被填充並完全清除。 一旦完成並且無法添加更多行,當 vector.removeAllElements() 被刪除時,我得到“IndexOutOfBounds 0>=0”,沒有錯誤,但結果不是想要的。

知道為什么嗎? 在哪里尋找索引? 我有點難住了。

親切的問候

編輯錯誤:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.base/java.util.Vector.elementAt(Vector.java:466)
at java.desktop/javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:661)
at java.desktop/javax.swing.JTable.getValueAt(JTable.java:2706)
at java.desktop/javax.swing.JTable.prepareRenderer(JTable.java:5724)
at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2190)
at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2092)
at java.desktop/javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1888)
at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JViewport.paint(JViewport.java:737)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5262)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
at java.desktop/java.awt.Container.paint(Container.java:2002)
at java.desktop/java.awt.Window.paint(Window.java:3928)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
vector.removeAllElements();

不要使用 removeAllElements() 方法。 擺脫這種說法。

TableModel 的每一行都必須是 Vector 的一個新實例。 您不能重復使用相同的 Vector。

    Vector<String> vector = new Vector<String>();
    while (rs.next()) {

上面的代碼需要改成:

    //Vector<String> vector = new Vector<String>();
    while (rs.next()) {
        Vector<String> vector = new Vector<String>();

所以你有了新的 Vector 實例。

暫無
暫無

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

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