Opa opa… sou novo no forum e estou desenvolvendo uma aplicação com base em alguns estudos mas venho me deparando com um problema bem chato que nao faco a minima ideia de como resolver.
Na aplicacao so esta sendo possivel busca, editar ou remover uma unica vez a cada execucao. Quando executo para efetuar uma segunda busca aparece:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
Em alguns foruns vi que isso é ocasionado por causa de estouro do array, mas nao estou sabendo como tratar.
Como poderia corrigir esse chato problema, se eh q eh o estouro do array mesmo, ou o q for.
Provavelmente você está iterando sobre uma coleção (list, array, etc) e procurando um índice maior que o existente (como se a list tivesse 2 elementos e você buscasse o nº 3).
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.removeElementAt(Vector.java:511)
at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:446)
at view.TelaPrincipal.jButtonBuscarActionPerformed(TelaPrincipal.java:335)
at view.TelaPrincipal.access$200(TelaPrincipal.java:10)
at view.TelaPrincipal$3.actionPerformed(TelaPrincipal.java:166)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Grande drsmachado, obrigado pelo retorno e meio q entendi o q mencionou, mas como estou chegando agora algumas coisas ainda nao ficam muito claras pra mim. Bom, de qualquer sorte segue trecho de consulta.
A colection em questão é um Vector.
Bem, como disse acima, você está realizando uma consulta dentro de uma estrutura de repetição (ou iteração) do tipo for, while ou do/while.
Mas, em algum momento, existe a chamada ao indice que está maior que o tamanho retornado pelo método size() do objeto em questão.
try {
String nome = jTextFieldBusca.getText();
ArquivoMortoBS arquivoMortobs = new ArquivoMortoBS();
Iterator vectorBusca = arquivoMortobs.consultar(nome);
if (vectorBusca.hasNext()) {
ArquivoMorto busca = (ArquivoMorto) vectorBusca.next();
adicionarLinhaTabela(busca);
} else {
JOptionPane.showMessageDialog(null, "Funcionário não encontrado");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}[/code]
Você tá sempre removendo a linha 1, mas nada garante que a mesma exista… não seria o caso de você fazer essa verificação antes?
Ou rever essa lógica… mas o erro está alí…
Porém você manda remover a linha de índice 1, que é a linha 2 da tabela. Lembre-se que a linha 1 será o índice 0, a linha 2 será o índice 1 e assim em diante.
Porém você manda remover a linha de índice 1, que é a linha 2 da tabela. Lembre-se que a linha 1 será o índice 0, a linha 2 será o índice 1 e assim em diante.[/quote]
Blz, obrigado mas mesmo alterando o modeloTabela.removeRow para 0 tb da erro.
Porém você manda remover a linha de índice 1, que é a linha 2 da tabela. Lembre-se que a linha 1 será o índice 0, a linha 2 será o índice 1 e assim em diante.[/quote]
Blz, obrigado mas mesmo alterando o modeloTabela.removeRow para 0 tb da erro.[/quote]
O “erro” nesse caso é usar uma variável para verificar o tamanho de outra coisa.
Se você quer remover linhas da tabela, faça o seguinte:
if (modeloTadela.getRowCount() > 0){ // esse trecho verifica se a tabela esta com alguma linha
// e aqui vc vai removendo com o removeRow... OU:
modeloTadela.setRowCount(0); // isso remove todas as linhas... \o/
Sets the number of rows in the model. If the new size is greater than the current size, new rows are added to the end of the model If the new size is less than the current size, all rows at index rowCount and greater are discarded. [/code]
O while não itera sobre a tabela enquanto esse valor for > 0?
Sendo assim, acredito que você deve decrementar o tableLinhas e não acrescentar…
Uma sugestão é trocar
[quote=marcelo.bellissimo][quote=zedd][quote=marcio_gs]Seguinte. Com o código abaixo você queria remover uma linha enquanto a tabela estivesse com linhas, certo?
Porém você manda remover a linha de índice 1, que é a linha 2 da tabela. Lembre-se que a linha 1 será o índice 0, a linha 2 será o índice 1 e assim em diante.[/quote]
Blz, obrigado mas mesmo alterando o modeloTabela.removeRow para 0 tb da erro.[/quote]
O “erro” nesse caso é usar uma variável para verificar o tamanho de outra coisa.
Se você quer remover linhas da tabela, faça o seguinte:
if (modeloTadela.getRowCount() > 0){ // esse trecho verifica se a tabela esta com alguma linha
// e aqui vc vai removendo com o removeRow... OU:
modeloTadela.setRowCount(0); // isso remove todas as linhas... \o/
Sets the number of rows in the model. If the new size is greater than the current size, new rows are added to the end of the model If the new size is less than the current size, all rows at index rowCount and greater are discarded. [/code][/quote]
Pronto, resolvido o problema. Muito obrigado marcelo.belissimo, so q agora apareceu outra coisa. A consulta so esta podendo ser executada uma unica vez com exito. Se tento fazer uma nova busca aparece o erro em anexo.
O while não itera sobre a tabela enquanto esse valor for > 0?
Sendo assim, acredito que você deve decrementar o tableLinhas e não acrescentar…
Uma sugestão é trocar
while(tableLinhas > 0){...
por
while(modeloTabela.getRowCount() > 0){...
[/quote]
Fiz a alteração e corrigiu. obrigado, só que agora estou com outro problema informado acima.
Então, algum erro está acontecendo, mas você está encapsulando ele com o try/catch… faz o seguinte, pelo menos pra podermos saber onde está ocorrendo, altera o seu try/catch e manda ele imprimir o stackTrace()… assim:
...
} catch (Exception e) {
e.printStackTrace(); // <- adiciona isso pra ele cuspir a exceção no console
JOptionPane.showMessageDialog(null, e.getMessage());
}
Ou, debugando a aplicação, e quando chegar nesse ponto você já consegue ver o que está acontecendo…
[quote=marcelo.bellissimo]Então, algum erro está acontecendo, mas você está encapsulando ele com o try/catch… faz o seguinte, pelo menos pra podermos saber onde está ocorrendo, altera o seu try/catch e manda ele imprimir o stackTrace()… assim:
...
} catch (Exception e) {
e.printStackTrace(); // <- adiciona isso pra ele cuspir a exceção no console
JOptionPane.showMessageDialog(null, e.getMessage());
}
Ou, debugando a aplicação, e quando chegar nesse ponto você já consegue ver o que está acontecendo…[/quote]
Ai o q mostra no console
java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:648)
at javax.swing.JTable.setValueAt(JTable.java:2719)
at view.TelaPrincipal.adicionarLinhaTabela(TelaPrincipal.java:379)
at view.TelaPrincipal.jButtonBuscarActionPerformed(TelaPrincipal.java:351)
at view.TelaPrincipal.access$200(TelaPrincipal.java:10)
at view.TelaPrincipal$3.actionPerformed(TelaPrincipal.java:166)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Desculpe mas infelismente ainda nao sei usar o debug. :?
at view.TelaPrincipal.adicionarLinhaTabela(TelaPrincipal.java:379)
Diz que é no método 'adicionarLinhaTabela", no arquivo TelaPrincipal, linha 379… novamente, manda aí o código pra gente ver o que tá fazendo ali no método… aposto que tem algo a ver com aquela variável, ainda, rs!
[quote=marcelo.bellissimo]Bem, aí seria outra história… veja o erro:
at view.TelaPrincipal.adicionarLinhaTabela(TelaPrincipal.java:379)
Diz que é no método 'adicionarLinhaTabela", no arquivo TelaPrincipal, linha 379… novamente, manda aí o código pra gente ver o que tá fazendo ali no método… aposto que tem algo a ver com aquela variável, ainda, rs![/quote]