Problema com lista muito grande

0 respostas
S
Olá! tenho uma aplicação em desenvolvimento usando netbeans+toplink+postgres, sendo que separei a estrutura em controle modelo e visao. Tenho uma listagem enorme com 28.000 registros puxados de um bean, jogo a listagem completa pra dentro de um jtable por intermédio de uma tablemodel e Decorators implementadas, mas porém como é uma lista muito grande ela nao fumega na jtable, no netbeans roda tranqulio, mas rodando independente acontece isso. Nao sei se é heap ou outra coisa, ja tive este problema no inicio e aparentemente tinha solucionado com os decorators. Segue abaixo os codigos.
/*
 package Controller.Dao;

import Controller.Formatter.FormataData;
import Modelo.Bean.Tbunimedlages;
import Modelo.Decorator.UnimedDecorator;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;

public class UnimedDAO extends GenericDAO{

    public UnimedDAO() {
    }
    FormataData data = new FormataData();

    public List<UnimedDecorator> getAllUnimedDecorators() {

        Query query = getEntityManager().createQuery("SELECT t FROM Tbunimedlages t ORDER BY t.idproduni");
        List<Tbunimedlages> lo = query.getResultList();

        List<UnimedDecorator> listDecorators = new ArrayList<UnimedDecorator>();
         for(Tbunimedlages t:lo){
            
            UnimedDecorator dc= new UnimedDecorator();
            dc.setCodproduni(lo.get(i).getCodproduni());
            dc.setIdproduni(lo.get(i).getIdproduni());
            dc.setNomeapresuni(lo.get(i).getNomeapresuni());
            dc.setNomecomeruni(lo.get(i).getNomecomeruni());
            dc.setNomelabuni(lo.get(i).getNomelabuni());
            dc.setQtdfrauni(String.valueOf(lo.get(i).getQtdfrauni()));
            dc.setUnidadeuni(lo.get(i).getUnidadeuni());
            dc.setVlrbraspfuni(lo.get(i).getVlrbraspfuni());
            dc.setVlrbraspmcuni(lo.get(i).getVlrbraspmcuni());
            dc.setVlrsimprouni(lo.get(i).getVlrsimprouni());
            dc.setTipoproduni(lo.get(i).getTipoproduni());

            listDecorators.add(dc);

        }
        return listDecorators;
    }

}
package Controller.TableModel;

import Modelo.Decorator.UnimedDecorator;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class UnimedTableModel extends AbstractTableModel{

    private static final long serialVersionUID = 1L;

	
	private List<UnimedDecorator> unimed;

	public UnimedTableModel() {
		// no construtor, instanciamos o List
		unimed = new ArrayList<UnimedDecorator>();
	}

	
	public UnimedTableModel(List<UnimedDecorator> lista) {
		this();
		unimed.addAll(lista);
	}

        public void zeraUnimed(){
            unimed = new ArrayList<UnimedDecorator>();
        }


	@Override
	public Class<?> getColumnClass(int coluna) {
		// todas as colunas representam uma String
		return String.class;
	}

	@Override
	public int getColumnCount() {
		// esse método deve retornar o número de colunas. No caso, 3 (uma para o
		// nome, uma para o sobrenome e uma para o apelido).
		return 11;
	}

	@Override
	public String getColumnName(int coluna) {
		
		switch (coluna) {
		case 0:
			return "Código"; // o nome da primeira coluna
		case 1:
			return "Cód.Produto"; // o nome da segunda
		case 2:
			return "Descrição Comercial"; // e o da terceira
                case 3:
			return "Descrição Apresentação"; // e o da terceira
                case 4:
			return "Laboratório"; // e o da terceira
                case 5:
			return "Unidade"; // e o da terceira
                case 6:
			return "Qtd.Frac."; // e o da terceira
                case 7:
			return "Valor Simpro";
                case 8:
			 return "Valor BrasÍndice PF";
                case 9:
			return "Valor BrasIndice PMC";
                case 10:
                        return "Tipo de Produto";
		default:
			return ""; 		}
	}

	@Override
	public int getRowCount() {
		
		return unimed.size();
	}

	@Override
	public Object getValueAt(int linha, int coluna) {
		
		UnimedDecorator c = unimed.get(linha);
		
		switch (coluna) {
		case 0:
			return c.getIdproduni();
		case 1:
			return c.getCodproduni();
		case 2:
			return c.getNomecomeruni();
                case 3:
			return c.getNomeapresuni();
                case 4:
			return c.getNomelabuni();
                case 5:
			return c.getUnidadeuni();
                case 6:
			return c.getQtdfrauni();
                case 7:
			return c.getVlrsimprouni();
                case 8:
			return c.getVlrbraspfuni();
                case 9:
			return c.getVlrbraspmcuni();
                case 10:
			return c.getTipoproduni();
		default:
			return null; 
		}
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		
		return false;
	}

	@Override
	public void setValueAt(Object valor, int linha, int coluna) {
		
		UnimedDecorator c = unimed.get(linha);
		
		switch (coluna) {
		case 0:
			c.setIdproduni(Long.parseLong(valor.toString())); // mudamos o nome
			break;
		case 1:
			c.setCodproduni(valor.toString()); // mudamos o sobrenome
			break;
		case 2:
			c.setNomecomeruni(valor.toString()); // e o apelido
			break;
                case 3:
			c.setNomeapresuni(valor.toString()); // e o apelido
			break;
                case 4:
			c.setNomelabuni(valor.toString()); // e o apelido
			break;
                case 5:
			c.setUnidadeuni(valor.toString()); // e o apelido
			break;
                case 6:
			c.setQtdfrauni(valor.toString()); // e o apelido
			break;
                case 7:
			c.setVlrsimprouni(BigDecimal.valueOf(Double.parseDouble(valor.toString()))); 
			break;
                case 8:
			c.setVlrbraspfuni(BigDecimal.valueOf(Double.parseDouble(valor.toString()))); 
			break;
                case 9:
			c.setVlrbraspmcuni(BigDecimal.valueOf(Double.parseDouble(valor.toString()))); 
			break;
                case 10:
			c.setTipoproduni(valor.toString());
			break;
		}
		
		fireTableDataChanged();
	}

	
	
	public void adiciona(UnimedDecorator c) {
		unimed.add(c);
		
		fireTableRowsInserted(unimed.size() - 1, unimed.size() - 1);
	}

	
	public void remove(int indice) {
		unimed.remove(indice);
		fireTableRowsDeleted(indice, indice);
	}

	
	public int getIndice(UnimedDecorator c) {
		return unimed.indexOf(c);
	}

	
	public void adicionaLista(List<UnimedDecorator> lista) {
                this.zeraUnimed();
		int i = unimed.size();
		unimed.addAll(lista);
		fireTableRowsInserted(i, i + lista.size());
	}

	
	public void limpaLista() {
		int i = unimed.size();
		unimed.clear();
		fireTableRowsDeleted(0, i - 1);

                unimed = new ArrayList<UnimedDecorator>();
	}
}
Este pedaço popula a jtable, alias esta vindo em branco.
//******************************************************************************
//******************************************************************************
    /*monta os dados no grid*/
    private void setMontaTbUnimed(){

        JTableUnimedLages.removeAll();
        unitm.removeTableModelListener(JTableUnimedLages);
        // aqui está a grande jogada!
		//ctm.addTableModelListener(this);
        unitm.adicionaLista(getUnimedControl().getAllUnimedControl());

        JTableUnimedLages.getColumnModel().getColumn(0).setPreferredWidth(80);
        JTableUnimedLages.getColumnModel().getColumn(1).setPreferredWidth(80);
        JTableUnimedLages.getColumnModel().getColumn(2).setPreferredWidth(500);
        JTableUnimedLages.getColumnModel().getColumn(3).setPreferredWidth(500);
        JTableUnimedLages.getColumnModel().getColumn(4).setPreferredWidth(300);
        JTableUnimedLages.getColumnModel().getColumn(5).setPreferredWidth(80);
        JTableUnimedLages.getColumnModel().getColumn(6).setPreferredWidth(80);
        JTableUnimedLages.getColumnModel().getColumn(7).setPreferredWidth(120);
        JTableUnimedLages.getColumnModel().getColumn(8).setPreferredWidth(120);
        JTableUnimedLages.getColumnModel().getColumn(9).setPreferredWidth(120);
        JTableUnimedLages.getColumnModel().getColumn(10).setPreferredWidth(120);
      //desabilitar auto resizeE
        this.JTableUnimedLages.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        this.JTableUnimedLages.setRowHeight(25);

      //tipo zero = seleção única
      this.JTableUnimedLages.setSelectionMode(0);

    }
Criado 1 de setembro de 2011
Respostas 0
Participantes 1