Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1

2 respostas Resolvido
java
Alyesson

Olá,

Eu tenho uma tabela com um JComboBox embutido nela, que mostra “Sim” e “Não”, quando eu seleciono o “Sim” ou “Não” e clico em “salvar”, ele salva no meu banco, porém logo em seguida dá uma exceção de “Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: -1”.

O “erro” está nessa linha: String sql = “Update perda_devol set pcp_status=’”+controle_Ro_table.getValueAt(controle_Ro_table.getSelectedRow(),20).toString()+"’ where num_RO like ‘"+controle_Ro_table.getValueAt(controle_Ro_table.getSelectedRow(),0).toString()+"’";

Meu código que está no event do botão é:

conecta_ro.conecta();

try{
        
        controle_Ro_table.editCellAt(controle_Ro_table.getSelectedRow(),controle_Ro_table.getSelectedColumn());

        int tam = controle_Ro_table.getRowCount();
        for (int i = 0; i < tam; i++){
            String sql = "Update perda_devol set pcp_status='"+controle_Ro_table.getValueAt(controle_Ro_table.getSelectedRow(),20).toString()+"' where num_RO like '"+controle_Ro_table.getValueAt(controle_Ro_table.getSelectedRow(),0).toString()+"'";
            
            PreparedStatement pstmt = conecta_ro.conexao.prepareStatement(sql);
            pstmt.execute();
            
            JOptionPane.showMessageDialog(null,"Registro alterado com sucesso","", JOptionPane.INFORMATION_MESSAGE);

            conecta_ro.executeSQL("Select * from perda_devol order by " + ordenacao);
            mostrar_tabela();
        }
        
    }catch(SQLException e){
        JOptionPane.showMessageDialog(null,"Erro ao salvar registro "+e,"Erro",JOptionPane.ERROR_MESSAGE);
    }
        conecta_ro.desconecta();

Eu não estou conseguindo achar o erro de vetor, se alguém souber encontrar o erro de lógica…agradecerei.

2 Respostas

Jothar_Aleksander
Solucao aceita

Acontece que, o método getSelectedRow() retorna -1 quando nada está selecionado, conforme descrito na documentação Class JTable. E a exceção apresentada indica justamente isso: java.lang.ArrayIndexOutOfBoundsException: -1, ou seja, “Exceção de Índice de Array Fora dos Limites: -1”, já que os índices são sempre número inteiros positivos, então há o lançamento da exceção.
Você deve garantir que haja uma linha selecionada na tabela.

Alyesson

Obrigado pela ajuda Jothar, era isso mesmo, eu declarei a linha selecionado através do getSelectedRow e funcionou, porém tive que tirar o for… o código ficou assim e funcionou do jeito que queria:

conecta_ro.conecta();

try{

        int conta = controle_Ro_table.getSelectedRow();
        
            String sql = "Update perda_devol set pcp_status='"+controle_Ro_table.getValueAt(conta,20).toString()+"' where num_RO like '"+controle_Ro_table.getValueAt(conta,0).toString()+"'";
            
            PreparedStatement pstmt = conecta_ro.conexao.prepareStatement(sql);
            pstmt.execute();
            
            JOptionPane.showMessageDialog(null,"Registro alterado com sucesso","", JOptionPane.INFORMATION_MESSAGE);

            conecta_ro.executeSQL("Select * from perda_devol order by " + ordenacao);
            mostrar_tabela();
        
    }catch(SQLException e){
        JOptionPane.showMessageDialog(null,"Erro ao salvar registro "+e,"Erro",JOptionPane.ERROR_MESSAGE);
    }
    conecta_ro.desconecta();
Criado 15 de setembro de 2019
Ultima resposta 15 de set. de 2019
Respostas 2
Participantes 2