Pergunta

Quero pegar e ignorar e ArrayIndexoutOfBoundSexception Erro (basicamente não é algo que eu tenho controle, então preciso do meu programa para continuar o Rushging).

No entanto, meu par de tentativas/captura não parece pegar a exceção e ignorá -lo. Espero que você possa escolher o que estou fazendo de errado.

A exceção ocorre nesta linha

content = extrator.getTextFrompage (página);

Aqui está o meu código:

for(int page=1;page<=noPages;page++){
    try{
        System.out.println(page);           
        content = extractor.getTextFromPage(page);
        }
    }   
    catch (ArrayIndexOutOfBoundsException e){
    System.out.println("This page  can't be read");
    }    
}

Exceção em thread "main" java.lang.arrayIndexoutOfBoundSexception: Índice inválido: 02 em com.lowagie.text.pdf.cmapawaredocumentfont.decodesingleCid (fonte desconhecida) em com.lowagie.text.pdf.cmapawaredocentfument) .lowagie.text.pdf.parser.PdfContentStreamProcessor.decode(Unknown Source) at com.lowagie.text.pdf.parser.PdfContentStreamProcessor.displayPdfString(Unknown Source) at com.lowagie.text.pdf.parser.PdfContentStreamProcessor$ShowText.invoke (Fonte desconhecida) em com.lowagie.text.pdf.parser.pdfcontentstreamprocessor.invokeoperator (fonte desconhecida) em com.lowagie.text.pdf.parser.pdfcontentstreamprocessor.processContent (soubro) em com.lowagie .Pdftextextractor.getTextFrompage (fonte desconhecida) em com.pdfextractor.main.extractor.main (extrator.java:64)

editar: Eu coloquei a tentativa/captura no loop for
e adicionou o rastreamento da pilha
e Índice removido = 1

Foi útil?

Solução

Pergunta estúpida, mas a ArrayIndexoutfBoundSexception que você coloca no mesmo pacote que o que está sendo jogado? ou seja, java.lang

Ou talvez Catch Throwable para ver se isso funciona.

Outras dicas

É possível que o código que você está chamando esteja lidando com o ArrayIndexOutOfBoundsException e imprimindo o traço da pilha por conta própria sem remontá -la. Se for esse o caso, você não veria o seu System.out.println chamado.

Editar: se você quiser continuar rindo, seria bom saber que o PDFContentStreamProcessor#processContent vai pegar o ArrayIndexOutOfBoundsException e depois jogue uma instância de seu com.lowagie.text.ExceptionConverter, que é uma subclasse de RuntimeException.

Talvez este seja um acéfalo (afinal, estou correndo em 3 horas de sono nas últimas 36 horas), mas na linha do que Digiarnie e Ankur mencionaram: você já tentou simplesmente catch (Exception e)?

Definitivamente não é o ideal, pois obviamente (junto com o Throwable t sugestão) captará todas as exceções sob o sol, não limitadas a ArrayOutOfBoundsException. Apenas pensei na ideia lá fora, se você ainda não tentou.

Em vez de usar essa exceção, você deve corrigir seu código para não passar pelos limites da matriz!

A maioria das matrizes conta de 0 até a Array.Length-1

Se você substituir o seu loop por isso, isso pode evitar todo o problema:

for (int page = 0;page < noPages;page++){

Você precisa da tentativa/captura para estar dentro do forloop. O controle aparece para a pegada, os incêndios e retoma o controle posteriormente, mas o forloop já foi encerrado.

    for(int page=1;page<=noPages;page++)
    {
        try
        {
            content = extractor.getTextFromPage(page); 
            System.out.println(content);
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            System.out.println("This page can't be read");
        }
    }

Talvez seja uma pergunta boba ... você tem certeza de que a exceção é lançada no código que você postou e não em um método diferente?

O programa deveria ter funcionado. Você deve fornecer mais detalhes, incluindo o nome da sua classe. Você pode tentar pegar exceção ou colocar um bloco finalmente com um pouco de POP.

Isso é estranho - na verdade, eu dei uma olhada na fonte do Itext no método de que a exceção é lançada (cmapawaredocumentfont.decodesinglecid) e parece que:

 private String decodeSingleCID(byte[] bytes, int offset, int len){
        if (toUnicodeCmap != null){
            if (offset + len > bytes.length)
                throw new ArrayIndexOutOfBoundsException("Invalid index: " + offset + len);
            return toUnicodeCmap.lookup(bytes, offset, len);
        }

        if (len == 1){
            return new String(cidbyte2uni, 0xff & bytes[offset], 1);
        }

        throw new Error("Multi-byte glyphs not implemented yet");
    }

O ArrayIndexoutOfBoundSexception que joga é o Java padrão. Não consigo ver nenhum motivo pelo seu try-capath original não funcionando.

Talvez você deva postar a turma inteira? Além disso, qual versão do iText você está usando?

Espere um segundo! Você está perdendo alguns aparelhos lá :) Sua declaração de captura está fora da sua declaração para para! Você tem isto:

for(int page=1;page<=noPages;page++){
    try{
        System.out.println(page);               
        content = extractor.getTextFromPage(page);
        }
    }   
    catch (ArrayIndexOutOfBoundsException e){
    System.out.println("This page  can't be read");
    }    
}

Deveria ser:

for(int page=1;page<=noPages;page++) {
    try{
        System.out.println(page);               
        content = extractor.getTextFromPage(page);
    }
    catch (ArrayIndexOutOfBoundsException e){
        System.out.println("This page  can't be read");
    } 
} //end for loop  

}//This closes your method or whatever is enclosing the for loop
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top