Erro ao utilizar TableModel!

8 respostas
paulinhohd

Olá galera,

Eu sei que assim é meio complicado saber o que é o erro, mas se alguém já viu algo parecido e sabe o que é, por favor help me, segue abaixo o erro.

Desde já obrigado!

Valeu! 8)

java.lang.NullPointerException at Principal$ProdutosTableModel.getRowCount(Principal.java:98) at javax.swing.JTable.checkLeadAnchor(Unknown Source) at javax.swing.JTable.tableChanged(Unknown Source) at javax.swing.JTable.setModel(Unknown Source) at javax.swing.JTable.<init>(Unknown Source) at javax.swing.JTable.<init>(Unknown Source) at Principal.<init>(Principal.java:141) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

8 Respostas

_fs

paulinho, o problema é que você está tentando acessar um método ou propriedade de um objeto que referencia null.

Não ajudou porcaria nenhuma né? :smiley: que tal postar o código do ProdutosTableModel, indicando qual é a linha 98?

marcioa1

Paulinho,

Você dá new ProdutosTableModel() em algum lugar do seu código ?

Márcio

paulinhohd

Olha ae o código LIPE:

public class ProdutosTableModel extends AbstractTableModel{

	    public ArrayList linhas = null;
	    public String [] colunas = null;
	    public String[] getColunas() {return colunas;}
	    public ArrayList getLinhas() {return linhas;}
	    public void setColunas(String[] strings) {colunas = strings;}
	    public void setLinhas(ArrayList list) {linhas = list;}
	
	public int getColumnCount() {return getColunas().length;}

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

	public Object getValueAt(int rowIndex, int columnIndex) {
	    // Obtem a linha, que é uma String []
	    String [] linha = (String [])getLinhas().get(rowIndex);
	    // Retorna o objeto que esta na coluna
	    return linha[columnIndex];
	}
	
	public ProdutosTableModel(ArrayList dados, String[] colunas, boolean [] edicao){
	    setLinhas(dados);
	    setColunas(colunas);
	    colsEdicao = edicao;
	}
	
	private boolean [] colsEdicao;
	public boolean isCellEditable(int row, int col){
	    return colsEdicao[col];
	}
	
	public void addRow( String [] dadosLinha){
	    getLinhas().add(dadosLinha);
	    // Informa a jtable de que houve linhas incluidas no modelo
	    // COmo adicionamos no final, pegamos o tamanho total do modelo
	    // menos 1 para obter a linha incluida.
	    int linha = getLinhas().size()-1;
	    //fireTableRowsInserted(linha,linha);
	    return;
	}
	public void removeRow(int row){
	    getLinhas().remove(0);
	    // informa a jtable que houve dados deletados passando a 
	    // linha reovida
	    //fireTableRowsDeleted(row,row);
	}
	}
marcioa1:
Paulinho,

Você dá new ProdutosTableModel() em algum lugar do seu código ?

Márcio

Sim, ae Márcio está dentro da minha classe INIT:

ArrayList dados;
		String[] colunas;
		boolean[] edicao;
		ProdutosTableModel modelo = new ProdutosTableModel(dados,colunas,edicao);
		JTable JTProdutos = new JTable(modelo);

Valeu galera! 8)

F
public ArrayList linhas = null;
    public String [] colunas = null;
    public String[] getColunas() {return colunas;}
    public ArrayList getLinhas() {return linhas;}
    public void setColunas(String[] strings) {colunas = strings;}
    public void setLinhas(ArrayList list) {linhas = list;}

Olá…
Me corrijam se eu estiver errado…

Cara primeiro vc declarra um ArrayList linhas = null;
Bem atá agora linhas tem null, certo?
depois vc faz um método que retorna um ArrayList chamado getLinhas.
bem getLinhas() retorna linhas que é null, certo?
o método getRowCount da sua TableModel retorna linhas que até agora é null, bem o problema me parece ser este… Bom daí vc pode dizer assim… áh mas tem um lugar do meu código que atualiza a variável “linhas”, bem então de uma olhada direitinho nesse lugar do seu código e verifique se realmente ele está atualizando a variável linhas adequadamente, verifique tb se o método getRowCount() da interface TableModel naum está sendo executada antes que “linhas” seja atualizada.

Bem a intenção foi ajudar, espero ter ajudado.
//Fábio

paulinhohd
<blockquote><div class="quote-author">Fábio Boschetti Campos:</div>                    public ArrayList linhas = null;

public String [] colunas = null;

public String[] getColunas() {return colunas;}

public ArrayList getLinhas() {return linhas;}

public void setColunas(String[] strings) {colunas = strings;}

public void setLinhas(ArrayList list) {linhas = list;}

Olá…
Me corrijam se eu estiver errado…

Cara primeiro vc declarra um ArrayList linhas = null;
Bem atá agora linhas tem null, certo?
depois vc faz um método que retorna um ArrayList chamado getLinhas.
bem getLinhas() retorna linhas que é null, certo?
o método getRowCount da sua TableModel retorna linhas que até agora é null, bem o problema me parece ser este… Bom daí vc pode dizer assim… áh mas tem um lugar do meu código que atualiza a variável “linhas”, bem então de uma olhada direitinho nesse lugar do seu código e verifique se realmente ele está atualizando a variável linhas adequadamente, verifique tb se o método getRowCount() da interface TableModel naum está sendo executada antes que “linhas” seja atualizada.

Bem a intenção foi ajudar, espero ter ajudado.
//Fábio

Ae valeu Fábio, mandou bem, realmente minha váriável nãoe stá sendo atualizada, vacilei mesmo…

Valeu! 8)

paulinhohd

Fábio, realmente minha getRowCount está sendo executada antes, veja o novo erro que consegui, porém é o mesmo problema de váriavel nula.

java.lang.NullPointerException at Principal$ProdutosTableModel.getRowCount(Principal.java:102) at javax.swing.JTable.checkLeadAnchor(Unknown Source) at javax.swing.JTable.tableChanged(Unknown Source) at javax.swing.JTable.setModel(Unknown Source) at javax.swing.JTable.<init>(Unknown Source) at javax.swing.JTable.<init>(Unknown Source) at Principal.<init>(Principal.java:44) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Tá difícil viu , pois não to sabendo como irei atualizar minha váriavel antes do getRowCount().

Vou continuar pelejando aqui.

Valeu! 8)

F

Cara, na verdade vc está atualizando sua variável linhas

quanto vc faz: new ProdutosTableModel(dados,colunas,edicao);

vc automaticamente chama o construtor dessa classe que chama o método

setLinhas(dados); e aqui nesse método vc atualiza sua variável linhas

agora o que tá meio estranho é esse método

public ArrayList getLinhas() {return linhas;} -> sei  do meu pondo de vista acho que ele deveria ser

public int getNumLinhas(){

primeiro valida se linhas não é null;

se não for daí vc faz uma variável do tipo int receber o número de

linhas

se for null vc faz a variável receber um outro inteiro

return uma variável do tipo int;

}

porque fazendo assim vc assegura que algum valor inteiro vc vai trazer

Bom tb tem o fato de vc utilizar esse método getLinhas() em getValueAt(int r, int c);
sei lá, pode até funcionar mas nesse método getLinhas e tb no método getValueAt vc naum testa se o valor de linhas ou o valor retornado de getLinhas é null.
E tb tem o fato de no construtor vc naum testar se “dados” tem alguma coisa.

Acho que seria melhor se vc fizesse essas validações

O mesmo problema pode acontecer tb em getColumnCount()

//Fábio

paulinhohd

Fábio Boschetti Campos:
Bom tb tem o fato de vc utilizar esse método getLinhas() em getValueAt(int r, int c);
sei lá, pode até funcionar mas nesse método getLinhas e tb no método getValueAt vc naum testa se o valor de linhas ou o valor retornado de getLinhas é null.
E tb tem o fato de no construtor vc naum testar se “dados” tem alguma coisa.

Acho que seria melhor se vc fizesse essas validações

O mesmo problema pode acontecer tb em getColumnCount()

//Fábio

Valeu pela ajuda, vou tentar o que vc falou Fábio.

Valeu mesmo, qualquer coisa posto novamente!

Criado 2 de maio de 2005
Ultima resposta 3 de mai. de 2005
Respostas 8
Participantes 4