Que que isso? Index out of fange

8 respostas
vinnyparker

Pessoal olha soh minha classe ta dando esse erro aí, index out of range -1

eu vou colar aquio errro e a linha do codigo onde ta dando o mesmo erro.
La vai a linha dos erros:

[init] export ContasFuncionarios java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1938) at br.com.link3.dp.convert.rh.agape.ContasFuncionariosDao.makeBean(ContasFuncionariosDao.java:136) at br.com.link3.dp.convert.rh.agape._RHAgapeDao.next(_RHAgapeDao.java:57) at br.com.link3.dp.convert.ConvertManager.export(ConvertManager.java:119) at br.com.link3.dp.convert.ConvertManager.processa(ConvertManager.java:286) at br.com.link3.dp.convert.MainForm$5.run(MainForm.java:351)

e a gora a linha da classe onde da o erro

String numero = resultSet.getString("numero");

bean.setNumero(numero.substring(0, numero.length()-1));
bean.setDigito(String.valueOf(numero.substring(numero.length()-1, numero.length())));

o erro se refere a linha 3

8 Respostas

andrerios

vc está tentando acessar uma posicao inexistente no array (nesse caso na String) ele quebra a String em um vetor d strings… dai ele nao achou o indice q vc procurou…

joaorafael

O possição da String que vc está querendo acessar não existe.
Veja se tem alguma coisa no numero antes de trabalhar com subString ,
manda imprimir para ver o que esta chegando.

A

Bom dia!

Você já verificou qual o retorno para esta linha: String numero = resultSet.getString(“numero”);
Essa “String numero” esta sendo iniciada mesmo, ela recebe algum valor? Verifique isso que pode te ajudar.

vinnyparker

bom pessoal, eu consegui resolver, eu tirei o substring e tratei de outra forma.
bom agora eh o seguinte:
meu programa tem como resultado um scrpit SQL
e esta classe q estava me referindo esta gerendo o script normalzinho. mas na hora q ta gerando aparece uma msg de erro q eu nao sei o q eh. tipo… da o erro mas gera o arquivo sacou???

eh o seguinte: INFO [Thread-2] (ConvertManager.java:124) - [init] export ContasFuncionarios java.lang.NullPointerException at br.com.link3.dp.convert.rh.agape.ContasFuncionariosDao.makeBean(ContasFuncionariosDao.java:125) at br.com.link3.dp.convert.rh.agape._RHAgapeDao.next(_RHAgapeDao.java:57) at br.com.link3.dp.convert.ConvertManager.export(ConvertManager.java:119) at br.com.link3.dp.convert.ConvertManager.processa(ConvertManager.java:286) at br.com.link3.dp.convert.MainForm$5.run(MainForm.java:351) INFO [Thread-2] (ConvertManager.java:207) - >[end] export ContasFuncionarios

alguem sabe o q eh?

lgr

Verifica se seu resultado tá vindo vazio.Ou ainda sua String pode estar vind sem nenhum tamanho.
Inicialize sua String com um texto pra vc ver,não deve dar erro…

L

O seu StringIndexOutOfBoundsException ocorria quando a String sua (o resultado de resultSet.getString(“numero”):wink: tinha tamanho zero. Aí, como a substring pedia (tamanho - 1), que resultava em -1, dava a exceção.

Quanto a NullPointerException, repare que está dando na linha 125 do arquivo ContasFuncionariosDao.java. Veja esta linha que, acredito, você não passou pra gente.

vinnyparker

Leonardo3001:
O seu StringIndexOutOfBoundsException ocorria quando a String sua (o resultado de resultSet.getString(“numero”):wink: tinha tamanho zero. Aí, como a substring pedia (tamanho - 1), que resultava em -1, dava a exceção.

Quanto a NullPointerException, repare que está dando na linha 125 do arquivo ContasFuncionariosDao.java. Veja esta linha que, acredito, você não passou pra gente.

Pessoal, eu descobri o q é, mas nao to conseguindo resolver.
essa linha 125 seta o resultado de um teste

if(agenciaAgape!= null){ if (agenciaAgape.equals("")) bean.setBancosAgencias(0); }else bean.setBancosAgencias((Integer.parseInt(agenciaAgape)));

bom, o campo agenciaAgape, é String e contem alguns campos em branco, vazio…
entao eu fiz o teste pra se caso for vazio, ele setar 0, porem em alguns casos esta trazendo vazio mesmo e em uma linha esta setando a palavra “agenciaAgape” ao invez de setar o 0. logo o problema esta no meu teste :shock: . alguem ja tentei varias possibilidades e nao to conseguindo resolver… :smiley:

L

Isso é identação enganosa. Não é porque você coloca o else embaixo de determinado if, que isso significa que aquele if é o escolhido. O else sempre se associa ao if mais próximo.

Seu código:

if(agenciaAgape!= null){
    if (agenciaAgape.equals(""))
        bean.setBancosAgencias(0);
    }else
			 bean.setBancosAgencias((Integer.parseInt(agenciaAgape)));

de fato significa isso:

if(agenciaAgape!= null){
    if (agenciaAgape.equals(""))
        bean.setBancosAgencias(0);
}else
    bean.setBancosAgencias((Integer.parseInt(agenciaAgape)));

O que significa que só vai ser convertido pra inteiro quando agenciaAgape for nulo.
Pra corrigir, coloque abre e fecha chaves pra todos os ifs, mesmo que só tenha um comando. Assim:

if(agenciaAgape!= null){
    if (agenciaAgape.equals("")) {
        bean.setBancosAgencias(0);
    } else {
        bean.setBancosAgencias((Integer.parseInt(agenciaAgape)));
    }
}
Criado 29 de agosto de 2008
Ultima resposta 30 de ago. de 2008
Respostas 8
Participantes 6