questa è una classe che dovrebbe rilasciare le celle necessari e a riempire una jTable solo che mi da qualche probla.

codice:
import java.awt.*;   <---RIGA 3
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.sql.*;
import java.util.*;

class QueryTableModel
    extends AbstractTableModel {
  String[] columnNames;
  ArrayList riga = new ArrayList();
  String[] cella;
  db db = new db();

  public QueryTableModel(String query) {
    int rowCount;
    db.connection();
    try {
      ResultSet rs = db.query(query);
      ResultSetMetaData rsmd = rs.getMetaData();
      int columnsNumber = rsmd.getColumnCount();
      columnNames = new String[columnsNumber];
      for (int i = 0; i < columnsNumber; i++) {
        columnNames[i] = rsmd.getColumnName(i + 1);
      }
      while (rs.next()) {  <--RIGA 28 (qua si inceppa)
        for (int i = 0; i < columnNames.length; i++) {
          cella[i] = rs.getString(i);
        }
        riga.add(cella);
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    finally {
      db.closedb();
    }
  }

  public int getRowCount() {
    return riga.size();
  }

  public int getColumnCount() {
    return columnNames.length;
  }

  public Object getValueAt(int r, int c) {
    cella = (String[]) (riga.get(r));
    System.out.println(cella[c]);
    return cella[c];
  }

  public String getColumnName(int c) {
    return columnNames[c];
  }
}
eccori:

org.postgresql.util.PSQLException: Connection is closed. Operation is not permitted.
at org.postgresql.jdbc1.AbstractJdbc1ResultSet.next(A bstractJdbc1ResultSet.java:138)
at iper.QueryTableModel.<init>(QueryTableModel.java:2 8)
at iper.trova_dialog.trova_ass_Button_actionPerformed (trova_dialog.java:566)
at iper.trova_dialog_trova_ass_Button_actionAdapter.a ctionPerformed(trova_dialog.java:608)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.act ionPerformed(AbstractButton.java:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.jav a:5100)
at java.awt.Component.processEvent(Component.java:489 7)
at java.awt.Container.processEvent(Container.java:156 9)
at java.awt.Component.dispatchEventImpl(Component.jav a:3615)
at java.awt.Container.dispatchEventImpl(Container.jav a:1627)
at java.awt.Component.dispatchEvent(Component.java:34 77)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3128)
at java.awt.Container.dispatchEventImpl(Container.jav a:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606 )
at java.awt.Component.dispatchEvent(Component.java:34 77)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 456)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:141)
at java.awt.Dialog$1.run(Dialog.java:540)
at java.awt.Dialog.show(Dialog.java:561)
at iper.guest_frame.trova_dialog_actionPerformed(gues t_frame.java:89)
at iper.guest_frame_trova_button_actionAdapter.action Performed(guest_frame.java:111)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.act ionPerformed(AbstractButton.java:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.jav a:5100)
at java.awt.Component.processEvent(Component.java:489 7)
at java.awt.Container.processEvent(Container.java:156 9)
at java.awt.Component.dispatchEventImpl(Component.jav a:3615)
at java.awt.Container.dispatchEventImpl(Container.jav a:1627)
at java.awt.Component.dispatchEvent(Component.java:34 77)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3128)
at java.awt.Container.dispatchEventImpl(Container.jav a:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606 )
at java.awt.Component.dispatchEvent(Component.java:34 77)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 456)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:100)

non riesco a capire dove sbaglio