Erro ao preencher JTable[RESOLVIDO]

5 respostas
F
[RESOLVIDO] - Era só trocar o tipo primitivo boolean para a classe Boolean aqui:
else if(columnIndex == COL_REALIZADO) return boolean.class;

Quando eu cadastro um objeto um erro ocorre e a JTable não é preenchida, apesar dos dados irem pro banco.
Se eu abro novamente o aplicativo e vou na tabela, ela fica toda apagada, mas dá pra ver alguns dados quando eu vou passando os campos no TAB.

Exception (apareceu 6 vezes, não colei porque senão ia ficar enorme.. e acho que era tudo igual):
Exception occurred during event dispatching:
java.lang.NullPointerException
	at javax.swing.JTable.prepareRenderer(JTable.java:5720)
	at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
	at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
	at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
	at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
	at javax.swing.JComponent.paintComponent(JComponent.java:752)
	at javax.swing.JComponent.paint(JComponent.java:1029)
	at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
	at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
	at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
	at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
	at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
	at java.awt.Dialog$1.run(Dialog.java:1046)
	at java.awt.Dialog$3.run(Dialog.java:1098)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Dialog.show(Dialog.java:1096)
	at java.awt.Component.show(Component.java:1584)
	at java.awt.Component.setVisible(Component.java:1536)
	at java.awt.Window.setVisible(Window.java:842)
	at java.awt.Dialog.setVisible(Dialog.java:986)
	at controle.ControleLancamento.<init>(ControleLancamento.java:46)
	at controle.ControlePrincipal.actionPerformed(ControlePrincipal.java:67)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

TableModel:

public class LancamentosTableModel<T> extends AbstractTableModel {  
        //Nome das colunas
        private static final int COL_DATA = 0;  
        private static final int COL_REALIZADO = 1;
        private static final int COL_DOCUMENTO = 2;  
        private static final int COL_CODIGO = 3; 
        private static final int COL_HISTORICO = 4;  
        private static final int COL_FAVORECIDO = 5;  
        private static final int COL_ENTRADA = 6;  
        private static final int COL_SAIDA = 7;  
        private static final int COL_CONTA = 8;
        private static final int COL_OBRA = 9;
      
        private List<MovimentoFinanceiro> movimentos;         
      
        public LancamentosTableModel(){
            this.movimentos = new ArrayList<MovimentoFinanceiro>();
        }
        
        public LancamentosTableModel(List<MovimentoFinanceiro> lista) {  
            this();
            this.movimentos.addAll(lista); 
        }  
      
    @Override
        public int getRowCount() {  
            
            return movimentos.size();  
        }  
      
    @Override
        public int getColumnCount() {  
            
            return 10;  
        }  
      
    @Override
        public String getColumnName(int columnIndex) {  
            if (columnIndex == COL_DATA) return "Data";  
            if (columnIndex == COL_REALIZADO) return "Realizado";
            if (columnIndex == COL_DOCUMENTO) return "Documento";
            if (columnIndex == COL_CODIGO) return "Código";
            if (columnIndex == COL_HISTORICO) return "Histórico";
            if (columnIndex == COL_FAVORECIDO) return "Favorecido";
            if (columnIndex == COL_ENTRADA) return "Entrada";
            if (columnIndex == COL_SAIDA) return "Saída";
            if (columnIndex == COL_CONTA) return "Conta";
            if (columnIndex == COL_OBRA) return "Obra";
            return ""; 
        }  
        
    @Override
        public Class<?> getColumnClass(int columnIndex) {  
            if (columnIndex == COL_DATA) return Date.class;  
            else if(columnIndex == COL_REALIZADO) return boolean.class;
            else if (columnIndex == COL_DOCUMENTO) return String.class;
            else if (columnIndex == COL_CODIGO) return Codigo.class;
            else if (columnIndex == COL_HISTORICO) return String.class;
            else if (columnIndex == COL_FAVORECIDO) return Favorecido.class;
            else if (columnIndex == COL_ENTRADA) return BigDecimal.class;
            else if (columnIndex == COL_SAIDA) return BigDecimal.class;
            else if (columnIndex == COL_CONTA) return Conta.class;
            else if (columnIndex == COL_OBRA) return Obra.class;
            return null;
        } 
      
    @Override
        public Object getValueAt(int row, int column) {  
            MovimentoFinanceiro movimento = movimentos.get(row);  
            if (column == COL_DATA) return movimento.getData();
            else if (column == COL_DOCUMENTO) return movimento.getNumDocumento();  
            else if (column == COL_CODIGO) return movimento.getCodigo();
            else if (column == COL_HISTORICO) return movimento.getHistorico();  
            else if (column == COL_FAVORECIDO) return movimento.getObra().getFavorecido();  
            else if (column == COL_ENTRADA) return movimento.getValor();  
            else if (column == COL_SAIDA) return movimento.getValor();  
            else if (column == COL_CONTA) return movimento.getConta();  
            else if (column == COL_OBRA) return movimento.getObra();  
            return ""; 
        }  
      
    @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
            MovimentoFinanceiro movimento = movimentos.get(rowIndex);
            if (columnIndex == COL_DATA) movimento.setData((Date)aValue);  
            else if (columnIndex == COL_DOCUMENTO) movimento.setNumDocumento(aValue.toString());                          
            else if (columnIndex == COL_CODIGO)  movimento.setCodigo((Codigo)aValue); 
            else if (columnIndex == COL_HISTORICO)  movimento.setHistorico(aValue.toString()); 
            else if (columnIndex == COL_FAVORECIDO)  movimento.getObra().setFavorecido((Favorecido)aValue);  
            else if (columnIndex == COL_ENTRADA)
                if(movimento.getTipo().equals("E"))
                    movimento.setValor((BigDecimal)aValue);
                else
                    movimento.setValor(BigDecimal.ZERO);
            
            else if (columnIndex == COL_SAIDA)  
                if(movimento.getTipo().equals("S"))
                    movimento.setValor((BigDecimal)aValue);
                else
                    movimento.setValor(BigDecimal.ZERO);
            else if (columnIndex == COL_CONTA)  movimento.setConta((Conta)aValue);
            else if (columnIndex == COL_OBRA)  movimento.setObra((Obra)aValue);
            
            fireTableDataChanged();
        }
      

          
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        
        return false;
    }
        
        public List<MovimentoFinanceiro> getMovimentos() {  
            return Collections.unmodifiableList(movimentos);  
        } 
        
        /
        public void inserir(MovimentoFinanceiro movimento) {  
            movimentos.add(movimento); 
            fireTableRowsInserted(movimentos.size()-1, movimentos.size()-1);
        }  
        
        public void atualizar(int indice, MovimentoFinanceiro c) {  
            movimentos.add(indice, c);
            this.fireTableRowsUpdated(indice, indice);
        } 
        
        public void remover(int indice) {  
            movimentos.remove(indice);
            fireTableRowsDeleted(indice, indice);
        }  
        
        public int getIndice(MovimentoFinanceiro c){
            return movimentos.indexOf(c);
        }
    
        
         
        public MovimentoFinanceiro get(int row) {  
            return movimentos.get(row);  
        }  
        
        public MovimentoFinanceiro getMovimento(int pos){
            if (pos < 0 || pos >= movimentos.size())
                return null;
            
            return movimentos.get(pos);
        }
        
        
        
    }

5 Respostas

ViniGodoy

Segundo essa linha da exception:
at controle.ControleLancamento.<init>(ControleLancamento.java:46)

O culpado está aqui:
ControleLancamento.java, no construtor, linha 46

F

ViniGodoy:
Segundo essa linha da exception:
at controle.ControleLancamento.<init>(ControleLancamento.java:46)

O culpado está aqui:
ControleLancamento.java, no construtor, linha 46

É um setVisible(true).
Tirei e o dialog apenas deixa de ficar visível.

ViniGodoy

Nunca chame setVisible(true) no construtor.
Você estará deixando visível uma janela não completamente construída.

De qualquer forma, é uma boa você postar para nós a classe ControleLancamento.java.

F
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import dao.DAOGenerico;
import java.awt.event.ActionEvent;
import javax.swing.event.ListSelectionEvent;
import visao.TelaLancamento;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionListener;
import modelo.Codigo;
import modelo.MovimentoFinanceiro;
import modelo.Conta;
import modelo.Favorecido;
import modelo.Obra;



public class ControleLancamento implements ActionListener, ListSelectionListener {
    
    private TelaLancamento tl;
    private MovimentoFinanceiro mv;
    private Conta c;
    private DAOGenerico<MovimentoFinanceiro> daog;
    private ArrayList array;
    private ArrayList  arrayCodigo;
    private ArrayList arrayConta;
    private ArrayList arrayObra;
    private ArrayList arrayFavorecido;
    
    public ControleLancamento(TelaLancamento tl, DAOGenerico daog){
        this.daog = daog;
        arrayCodigo = (ArrayList) daog.listar(Codigo.class);
        arrayConta = (ArrayList) daog.listar(Conta.class);
        arrayObra = (ArrayList) daog.listar(Obra.class);
        arrayFavorecido = (ArrayList) daog.listar(Favorecido.class);
        array = (ArrayList) daog.listar(MovimentoFinanceiro.class);
        this.tl = tl;
        tl.escuta(this, this);
        tl.adicionaListaTabela(array);
        tl.preencheCombo(arrayCodigo, arrayConta, arrayObra, arrayFavorecido);
        tl.setVisible(true);
    }
    
    @Override
    public void actionPerformed(ActionEvent e){
        
         
        if(e.getActionCommand().equals("Cadastrar/Alterar")){
                mv = new MovimentoFinanceiro();
            if(this.daog == null)
                daog = new DAOGenerico<MovimentoFinanceiro>();
            mv.setData(tl.getjDateChooser1().getDate());
            Double valor = Double.parseDouble(tl.getjFormattedTextFieldValor().getText().replaceAll("[.|,]", ""));
            mv.setValor(BigDecimal.valueOf(valor));
            mv.setCodigo((Codigo)tl.getCodigoSelecionado());
            mv.setConta((Conta)tl.getContaSelecionada());
            mv.setData(tl.getjDateChooser1().getDate());
            mv.setHistorico(tl.getjTextFieldHistorico().getText());
            mv.setObra((Obra)tl.getObraSelecionada());
            mv.setNumDocumento(tl.getjTextField1().getText());
            if(tl.getjCheckBox1().isSelected())
                mv.setRealizado(true);
            if(tl.getjRadioButtonC().isSelected())
                mv.setTipo("E");
            else
                mv.setTipo("S");
            tl.adicionaItemTabela(mv);
            try{
                daog.save2(mv);
            }catch(NullPointerException exc){
                System.out.println(exc);
            }
            
        }
        else if(e.getActionCommand().equals("Excluir")){
            
        }
        else if(e.getActionCommand().equals("Transferir")){
            
        }
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if(e.getValueIsAdjusting())
            return ;
        else if(!tl.isLinhaSelecionada())
            return ;
        
        mv = new MovimentoFinanceiro();
        mv = tl.getMovimentoDaLinhaSelecionada();
        tl.setTextValor(""+mv.getValor());
        tl.setTextHistorico(mv.getHistorico());
        tl.setData(mv.getData());
        //...
        
    }
    
}
F

O erro está na coluna realizado, que é boolean, mas não sei porque tá dando erro…

EDIT: Foi resolvido há tempos, era só trocar o tipo primitivo boolean pela classe Boolean.

Criado 8 de agosto de 2011
Ultima resposta 8 de ago. de 2011
Respostas 5
Participantes 2