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)
[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);
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
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().
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()
[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.