Erro ao tentar filtrar matriz
Bom dia, estou trabalhando com arquivos txt, ja consegui ler arquivos e tals. o problema é que eu leio um arquivo, trato esse arquivo e jogo em uma matriz, até ai tudo bem, segue o método que le esse arquivo:
a partir deste ponto eu chamo a função acima no código fonte do meu GUI e armazeno o retorno em uma matriz do mesmo tipo e tamanho
até aqui tudo certo, ele le o arquivo, faz o tratamento e joga na matriz testOrder que vou usar adiante.
O que preciso dessa matriz são os indices de 0 a 4
Se na linha 1, coluna 0 contem o nome "test" && linha 1, coluna 3 nao tem o nome "version" ou é null eu vou abrir um arquivo em um determinado caminho.
Se na linha 1, coluna 0 contem o nome "test" && linha 1, coluna 3 contem o nome "version" ou é null eu vou abrir um arquivo em um outro caminho.
Acontece que só estou conseguindo filtrar pela linha 1 e coluna 0, segue o código:
Da forma acima funciona, mas quando vou filtrar tambem pela linha 1 e coluna 3 ocorre erro, a coluna 3 pode nao ter nada, pode ter a string "version" e pode ter outra string qualquer, mas para meu uso só me interessa se ela tiver vazia ou conter ou nao o a string "version" segue cógido:
O erro é esse:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3
at bomcalculator.UI_BomCalculator.btnGerarTestesActionPerformed(UI_BomCalculator.java:174)
at bomcalculator.UI_BomCalculator.access$000(UI_BomCalculator.java:10)
at bomcalculator.UI_BomCalculator$1.actionPerformed(UI_BomCalculator.java:57)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
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:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
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)
Pelo que entendi esta falando que excedeu o array, mas nao esta excendo o array.
public static String[][] leitorTestOrder(String path) throws IOException { BufferedReader buffRead = new BufferedReader(new FileReader(path)); String linha = ""; String convertSpaceLine = ""; int ContadorTestOrder = 0; String testOrder[][] = new String[30000][30]; //Guarda as informações do board while (true) { if (linha != null) { System.out.println(linha + " , Linha sem espaço:" + convertSpaceLine); } else { break; } linha = buffRead.readLine(); // Pega a linha para remover os espaços em branco e deixar // apenas um espaço. convertSpaceLine = linha; Character caracterEsepcial = '"'; if ((linha != null) && (!linha.contains("!"))) { while ((convertSpaceLine.contains(" ")) || (convertSpaceLine.contains(caracterEsepcial.toString()))) { convertSpaceLine = convertSpaceLine.replace(" ", " "); convertSpaceLine = convertSpaceLine.replace(caracterEsepcial.toString(), ""); } testOrder[ContadorTestOrder] = convertSpaceLine.split(" "); ContadorTestOrder++; } } buffRead.close(); return testOrder; }
a partir deste ponto eu chamo a função acima no código fonte do meu GUI e armazeno o retorno em uma matriz do mesmo tipo e tamanho
String testOrder[][] = new String[30000][30]; //Guarda as informações do board String componente[] = new String[1000]; //Guarda as informações do componente //Armazena o caminho indicados pelo usuário: pathTestOrder = txtCaminhoTestOrder.getText(); try { //Armazena os dados do TestOrder no array board: testOrder = ManipuladorArquivo.leitorTestOrder(pathTestOrder + "testorder"); JOptionPane.showMessageDialog(rootPane, testOrder, "Informação", JOptionPane.INFORMATION_MESSAGE); lblMsg.setText("Lendo arquivo TestOrder e gerando parâmetros..."); } catch (IOException ex) { Logger.getLogger(UI_BomCalculator.class.getName()).log(Level.SEVERE, null, ex); }
até aqui tudo certo, ele le o arquivo, faz o tratamento e joga na matriz testOrder que vou usar adiante.
O que preciso dessa matriz são os indices de 0 a 4
Se na linha 1, coluna 0 contem o nome "test" && linha 1, coluna 3 nao tem o nome "version" ou é null eu vou abrir um arquivo em um determinado caminho.
Se na linha 1, coluna 0 contem o nome "test" && linha 1, coluna 3 contem o nome "version" ou é null eu vou abrir um arquivo em um outro caminho.
Acontece que só estou conseguindo filtrar pela linha 1 e coluna 0, segue o código:
if (testOrder[0][0].contentEquals("test"/*.contains("test".toLowerCase()*/)) { try { componente = ManipuladorArquivo.leitorComponente(pathTestOrder + "\\\\analog\\\\" + testOrder[0][2]); } catch (IOException ex) { Logger.getLogger(UI_BomCalculator.class.getName()).log(Level.SEVERE, null, ex); } }
Da forma acima funciona, mas quando vou filtrar tambem pela linha 1 e coluna 3 ocorre erro, a coluna 3 pode nao ter nada, pode ter a string "version" e pode ter outra string qualquer, mas para meu uso só me interessa se ela tiver vazia ou conter ou nao o a string "version" segue cógido:
if (testOrder[0][0].contentEquals("test"/*.contains("test".toLowerCase()*/)) { if (testOrder[0][3].contentEquals(null)) { try { componente = ManipuladorArquivo.leitorComponente(pathTestOrder + "\\\\analog\\\\" + testOrder[0][2]); } catch (IOException ex) { Logger.getLogger(UI_BomCalculator.class.getName()).log(Level.SEVERE, null, ex); } } }
O erro é esse:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3
at bomcalculator.UI_BomCalculator.btnGerarTestesActionPerformed(UI_BomCalculator.java:174)
at bomcalculator.UI_BomCalculator.access$000(UI_BomCalculator.java:10)
at bomcalculator.UI_BomCalculator$1.actionPerformed(UI_BomCalculator.java:57)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
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:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
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)
Pelo que entendi esta falando que excedeu o array, mas nao esta excendo o array.
Pedro Luis
Curtidas 0
Respostas
Israel Suhanko
30/06/2017
O componente é um array; está faltando o índice onde será armazenado a informações que está sendo recebida.
Isso resolverá a exceção, mas guardará a informação APENAS no índice 0 do array. A partir daí é só alterar o código conforme precisar.
// código original componente = ManipuladorArquivo.leitorComponente(pathTestOrder + "\\\\\\\\analog\\\\\\\\" + testOrder[0][2]); // código modificado componente[0] = ManipuladorArquivo.leitorComponente(pathTestOrder + "\\\\\\\\analog\\\\\\\\" + testOrder[0][2]);
Isso resolverá a exceção, mas guardará a informação APENAS no índice 0 do array. A partir daí é só alterar o código conforme precisar.
GOSTEI 0