Null Pointer

8 respostas
guisantogui

Gente to tentando adicionar um comboBox em uma JTable, estou seguindo um exemplo do site da sun, mas qdo eu mando a minha TableColumn receber o valor da coluna da tabela q tenho, ele estoura NPE.

Pergunta: Tenho q fazer um modelo para esta coluna?

vlw!

8 Respostas

peczenyj

sem ver a stacktrace e o codigo pode ser qq coisa.

provavelmente se vc usar um debugger vai descobrir mais cedo do que imagina.

guisantogui

Quando eu debugo ele cai direto na excessão não da nem pra ver

Stack:

Exception in thread "main" java.lang.NullPointerException
        at Interface.Financeiro.Tabelas.TabCentroCustGrupos.<init>(TabCentroCustGrupos.java:20)
        at Interface.Financeiro.JanelaFinTabelas.<init>(JanelaFinTabelas.java:27)
        at Interface.JanelaFinanceiro.<init>(JanelaFinanceiro.java:19)
        at Interface.JanelaMenuPrincipal.<init>(JanelaMenuPrincipal.java:14)
        at Classes.Main.main(Main.java:14)
guisantogui

Alguém?

marcelo.bellissimo

Posta o código da sua classe TabCentroCustGrupos.java pra gente…

guisantogui

Classe completa com codigo gerado pelo netBeans também!

package Interface.Financeiro.Tabelas;

import BancoDeDados.GerenciaConexaoBancoComDados;
import Classes.Modelos.ColCombBoxTabCentroCustGrupos;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.CellEditor;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;

public class TabCentroCustGrupos extends javax.swing.JFrame {

    private DefaultTableModel modelo = null;
    private ResultSet rs = null;
    private Statement stm = null;
    private GerenciaConexaoBancoComDados gcbd = new GerenciaConexaoBancoComDados();
    private TableColumn comboBoxTab = new TableColumn(1);
    private ColCombBoxTabCentroCustGrupos colunaComb = new ColCombBoxTabCentroCustGrupos();

    public TabCentroCustGrupos(){
        initComponents();
        initTabela();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        painel = new javax.swing.JLayeredPane();
        lblFundo = new javax.swing.JLabel();
        lblContas = new javax.swing.JLabel();
        lblDescricao = new javax.swing.JLabel();
        lblGrupo = new javax.swing.JLabel();
        lblCriterio = new javax.swing.JLabel();
        lblClassificacao = new javax.swing.JLabel();
        lblClassificacao1 = new javax.swing.JLabel();
        lblDistribCentrosCustos = new javax.swing.JLabel();
        lblPessoa = new javax.swing.JLabel();
        txtGrupo = new javax.swing.JTextField();
        txtDescricao = new javax.swing.JTextField();
        txtClassificacao = new javax.swing.JTextField();
        painelTxtArea = new javax.swing.JScrollPane();
        areaCriterio = new javax.swing.JTextArea();
        painelTab = new javax.swing.JScrollPane();
        tabCentroCustGrupos = new javax.swing.JTable();
        btnRetorna = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

        painel.setMinimumSize(new java.awt.Dimension(1024, 768));

        lblFundo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Interface/TelaFundo.JPG"))); // NOI18N
        lblFundo.setBounds(0, 0, 1024, 768);
        painel.add(lblFundo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        lblContas.setFont(new java.awt.Font("Verdana", 1, 24));
        lblContas.setForeground(new java.awt.Color(255, 255, 51));
        lblContas.setText("Centro de custos por Grupos");
        lblContas.setBounds(320, 180, 450, 30);
        painel.add(lblContas, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblDescricao.setBackground(new java.awt.Color(255, 255, 255));
        lblDescricao.setFont(new java.awt.Font("Verdana", 0, 12));
        lblDescricao.setForeground(new java.awt.Color(255, 255, 255));
        lblDescricao.setText("Descrição");
        lblDescricao.setBounds(230, 260, 80, 16);
        painel.add(lblDescricao, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblGrupo.setBackground(new java.awt.Color(255, 255, 255));
        lblGrupo.setFont(new java.awt.Font("Verdana", 0, 12));
        lblGrupo.setForeground(new java.awt.Color(255, 255, 255));
        lblGrupo.setText("Grupo");
        lblGrupo.setBounds(230, 230, 50, 16);
        painel.add(lblGrupo, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblCriterio.setBackground(new java.awt.Color(255, 255, 255));
        lblCriterio.setFont(new java.awt.Font("Verdana", 0, 12));
        lblCriterio.setForeground(new java.awt.Color(255, 255, 255));
        lblCriterio.setText("Critério");
        lblCriterio.setBounds(230, 290, 60, 16);
        painel.add(lblCriterio, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblClassificacao.setBackground(new java.awt.Color(255, 255, 255));
        lblClassificacao.setFont(new java.awt.Font("Verdana", 0, 12));
        lblClassificacao.setForeground(new java.awt.Color(255, 255, 255));
        lblClassificacao.setText("Classificação");
        lblClassificacao.setBounds(230, 400, 100, 16);
        painel.add(lblClassificacao, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblClassificacao1.setBackground(new java.awt.Color(255, 255, 255));
        lblClassificacao1.setFont(new java.awt.Font("Verdana", 0, 12));
        lblClassificacao1.setForeground(new java.awt.Color(255, 255, 255));
        lblClassificacao1.setText("OBS.: A soma dos percentuais deve totalizar 100");
        lblClassificacao1.setBounds(670, 480, 350, 20);
        painel.add(lblClassificacao1, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblDistribCentrosCustos.setBackground(new java.awt.Color(255, 255, 255));
        lblDistribCentrosCustos.setFont(new java.awt.Font("Verdana", 0, 12));
        lblDistribCentrosCustos.setForeground(new java.awt.Color(255, 255, 255));
        lblDistribCentrosCustos.setText("Distribuição por centros de custos");
        lblDistribCentrosCustos.setBounds(320, 430, 240, 20);
        painel.add(lblDistribCentrosCustos, javax.swing.JLayeredPane.PALETTE_LAYER);

        lblPessoa.setBackground(new java.awt.Color(255, 255, 255));
        lblPessoa.setFont(new java.awt.Font("Verdana", 0, 12));
        lblPessoa.setForeground(new java.awt.Color(255, 255, 255));
        lblPessoa.setText("Total:");
        lblPessoa.setBounds(670, 530, 50, 16);
        painel.add(lblPessoa, javax.swing.JLayeredPane.PALETTE_LAYER);
        txtGrupo.setBounds(320, 230, 70, 20);
        painel.add(txtGrupo, javax.swing.JLayeredPane.PALETTE_LAYER);
        txtDescricao.setBounds(320, 260, 380, 20);
        painel.add(txtDescricao, javax.swing.JLayeredPane.PALETTE_LAYER);
        txtClassificacao.setBounds(320, 400, 380, 20);
        painel.add(txtClassificacao, javax.swing.JLayeredPane.PALETTE_LAYER);

        areaCriterio.setColumns(20);
        areaCriterio.setRows(5);
        painelTxtArea.setViewportView(areaCriterio);

        painelTxtArea.setBounds(320, 290, 380, 96);
        painel.add(painelTxtArea, javax.swing.JLayeredPane.PALETTE_LAYER);

        tabCentroCustGrupos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Título 1", "Título 2", "Titulo 3"
            }
        ));
        tabCentroCustGrupos.setColumnSelectionAllowed(true);
        tabCentroCustGrupos.getTableHeader().setReorderingAllowed(false);
        tabCentroCustGrupos.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                tabCentroCustGruposFocusLost(evt);
            }
        });
        painelTab.setViewportView(tabCentroCustGrupos);
        tabCentroCustGrupos.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        painelTab.setBounds(270, 470, 380, 260);
        painel.add(painelTab, javax.swing.JLayeredPane.PALETTE_LAYER);

        btnRetorna.setFont(new java.awt.Font("Verdana", 0, 12));
        btnRetorna.setText("Retorna");
        btnRetorna.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRetornaActionPerformed(evt);
            }
        });
        btnRetorna.setBounds(600, 740, 87, 25);
        painel.add(btnRetorna, javax.swing.JLayeredPane.PALETTE_LAYER);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(painel, javax.swing.GroupLayout.PREFERRED_SIZE, 1024, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(painel, javax.swing.GroupLayout.PREFERRED_SIZE, 768, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>

    private void tabCentroCustGruposFocusLost(java.awt.event.FocusEvent evt) {                                              
        modelo = (DefaultTableModel) tabCentroCustGrupos.getModel();
        try{
            CellEditor ce = tabCentroCustGrupos.getCellEditor();
            ce.stopCellEditing();
        }
        catch(NullPointerException npe){
            System.out.println("Excessão NPE tratada!");
        }
        if(tabCentroCustGrupos.getValueAt(modelo.getRowCount()-1, 0) != null || tabCentroCustGrupos.getValueAt(modelo.getRowCount()-1, 1) != null){
            modelo.addRow(new Object[]{});
        }
}                                             

    private void btnRetornaActionPerformed(java.awt.event.ActionEvent evt) {                                           
        this.dispose();
}                                          

    public void initTabela(){ // Ter um iniTab() para cada jRadioButton
        try {
            stm = (Statement) gcbd.getBanco().getConexao().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            rs = stm.executeQuery("SELECT fg.grupo, fg.percentual, fn.descricao FROM fn_grupo_ccusto AS fg INNER JOIN fn_ccusto AS fn ON TRUE");
            modelo = (DefaultTableModel) tabCentroCustGrupos.getModel();

            if(rs.first()){
                do{
                    modelo.addRow(new Object[]{rs.getObject(1)});
                    modelo.setValueAt(rs.getObject(2), rs.getRow()-1, 2);
                    colunaComb.addItem(rs.getObject(3));
                }
                while(rs.next());
            }
//            else
//                System.out.println("Não a linhas na tabela");

            rs.first();
            tabCentroCustGrupos.setModel(modelo);
        }
        catch (SQLException ex){
          ex.printStackTrace();
        }

        modelo.addRow(new Object[]{});
        tabCentroCustGrupos.setModel(modelo);
    }

    public JTable getTabela(){
        return tabCentroCustGrupos;
    }

    public TableCellEditor editorColuna(){
        return new DefaultCellEditor(colunaComb);
    }

    // Variables declaration - do not modify
    private javax.swing.JTextArea areaCriterio;
    private javax.swing.JButton btnRetorna;
    private javax.swing.JLabel lblClassificacao;
    private javax.swing.JLabel lblClassificacao1;
    private javax.swing.JLabel lblContas;
    private javax.swing.JLabel lblCriterio;
    private javax.swing.JLabel lblDescricao;
    private javax.swing.JLabel lblDistribCentrosCustos;
    private javax.swing.JLabel lblFundo;
    private javax.swing.JLabel lblGrupo;
    private javax.swing.JLabel lblPessoa;
    private javax.swing.JLayeredPane painel;
    private javax.swing.JScrollPane painelTab;
    private javax.swing.JScrollPane painelTxtArea;
    private javax.swing.JTable tabCentroCustGrupos;
    private javax.swing.JTextField txtClassificacao;
    private javax.swing.JTextField txtDescricao;
    private javax.swing.JTextField txtGrupo;
    // End of variables declaration
}
marcelo.bellissimo

Se a linha 20 do seu código bate com a linha 20 do que você postou aqui, então seu erro está no método construtor dessa classe GerenciaConexaoBancoComDados, veja essa linha:

private GerenciaConexaoBancoComDados gcbd = new GerenciaConexaoBancoComDados();
guisantogui

Não não amigo, já fiz esse teste o meu comboBox esta populado já!

o problema eh na hora de setar a coluna na tabela eu acho, pois se eu fizer como no exemplo do site da sun:

TableColumn sportColumn = table.getColumnModel().getColumn(2); // <-- Isso da null Pointer, pq eu naum tenho um modelo para as colunas da JTable

entende, e no meu codigo com o: new TableColumn(1); funciona mas naum aparece o combo na tabela! :confused:

guisantogui

Compreendem onde esta o problema, mas não sei como implementar um column model e setar ele depois! :confused:

Criado 31 de maio de 2010
Ultima resposta 1 de jun. de 2010
Respostas 8
Participantes 3