Erro ao utilizar TableModel!

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)

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?

Paulinho,

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

Márcio

Olha ae o código LIPE:

[code]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);
}
}[/code]

[quote=marcioa1]Paulinho,

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

Márcio[/quote]

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)

                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

[quote=Fábio Boschetti Campos] 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

[/quote]

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

Valeu! 8)

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)

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 lá 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

[quote=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[/quote]

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

Valeu mesmo, qualquer coisa posto novamente!