Olá, gostaria de uma ajuda.
Seguinte,
Estou com um problema de exceção que não consigo detectar aonde o java está disparando a mensagem de exceção.
Basicamente o que eu faço:
Eu tenho uma JTable, nessa JTable eu mostro apenas os “pedidos” que estão para chegar em um “estabelecimento”.
Depois, que o pedido chegar, o usuário irá lançar o pedido que chegou no estoque.
Então é, só é mostrado na JTable pedidos com “STATUS” de “Aguardando Entrega”, caso contrario ele não mostra.
Pois bem, vamos a situação:
Vamos supor que nessa Jtable tenho duas linhas.
E vamos ainda supor que o produto da linha 1, ou seja, linhas começam do 0, acabou de chegar, e o sujeito vai lançar no estoque. Aí eu faço um lançamento normal desse pedido.
Só que quando eu clico no botão de incluir no estoque esse pedido que não é mais “Aguardando Entrega”, ele não deve mais aparecer na minha jTable e esta fica apenas com 1 linha.
É nessa hora que aparece a mensagem de exceção.
Basicamente eu eu faço isso para incluir no estoque (Uso o swing worker) e depois chamo o carregamento da Jtable novamente. Segue
private void start() {
SwingWorker worker = new SwingWorker() {
@Override
protected Void doInBackground() throws Exception {
// aqui dentro tem os códigos de inclusão no banco do estoque.
// aqui tambem eu faço um try para carregar novamente a JTable, ou seja
// só os dados com a coluna Status = "Aguardando entrega"
try {
startPedidos();
System.out.println("Carregou Pedidos");
} catch (Exception e) {
System.out.println(e.toString());
}
}
return null;
}
};
worker.execute();
}
private void startPedidos(){
SwingWorker worker = new SwingWorker() {
@Override
protected Void doInBackground() throws Exception {
try{
MostrarTabelas mostrarBaseProdutosPedidos = new MostrarTabelas();
TabelaPedidosTH model = new TabelaPedidosTH(mostrarBaseProdutosPedidos.lerTabelaDePedidosParaRecebimento());
lst_pedidos_em_andamento.setModel(model);
lbl_contador_de_pedidos.setText("Registros em pedido: " + String.valueOf(lst_pedidos_em_andamento.getRowCount()));
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("erro: " + e.toString());
}
return null;
}
};
worker.execute();
}
Eu estou usando o abstract Table Model.
Segue meu abstract
public class TabelaPedidosTH extends AbstractTableModel{
private List<Pedidos> linhas = null;
private String[] colunas = new String[] {"ID_PEDIDO","PRODUTO", "DESCRIÇÃO", "UNID.", "FORNECEDOR", "QUANTIDADE", "DATA PEDIDO", "PREVISÃO DE CHEGADA", "VALIDADE (A)", "VALIDADE (B)", "STATUS PEDIDOS"};
public TabelaPedidosTH(List<Pedidos> pedidos) {
this.linhas = pedidos;
}
public void setColunas(String[] colunas) {
this.colunas = colunas;
}
public void setLinhas(ArrayList linhas) {
this.linhas = linhas;
}
@Override
public int getRowCount() {
return linhas.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
public String[] getColunas() {
return colunas;
}
@Override
public Object getValueAt(int rowIndex, int columIndex) {
Pedidos p = null;
p = linhas.get(rowIndex);
switch(columIndex){
case 0:
return p.getId_pedido();
case 1:
return p.getNomeProdutoPedido();
case 2:
return p.getDescricaoProdutoPedido();
case 3:
return p.getUnidadeProdutoPedido();
case 4:
return p.getNomeFornecedorPedido();
case 5:
return p.getQuantidadePedido();
case 6:
return p.getDataPedido();
case 7:
return p.getPrevisaoChegadaPedido();
case 8:
return p.getValidadeAProduto();
case 9:
return p.getValidadeBProduto();
case 10:
return p.getStatuspedido();
default:
System.err.println("Índice inválido para propriedade");
}
return null;
}
public ArrayList getLinhas() {
return (ArrayList) linhas;
}
@Override
public String getColumnName(int columnIndex){
return colunas[columnIndex];
}
public void limpar() {
linhas.clear();
fireTableDataChanged();
}
public void adicionar(Pedidos novo){
linhas.add(novo);
fireTableRowsInserted(linhas.size() - 1, linhas.size() - 1);
fireTableDataChanged();
}
}
Essa é a mensagem de exceção:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 9 >= 9
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at javax.swing.plaf.basic.BasicTableUI.paintGrid(BasicTableUI.java:1973)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1809)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:780)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Não sei mais aonde procurar esse estouro do Array.
Por favor, podem me ajudar a sanar essa dificuldade ?
Grato desde já.