문제

나는 잡아서 무시하고 arrayindexoutofboundsexception 오류를 원합니다 (기본적으로 제어 할 수있는 것이 아니므로 계속 걸어 갈 프로그램이 필요합니다).

그러나 내 시도/캐치 쌍은 예외를 잡아서 무시하지 않는 것 같습니다. 바라건대 내가 잘못하고있는 일을 선택할 수 있기를 바랍니다.

이 줄에서 예외가 발생합니다

content = extractor.getTextFrompage (페이지);

내 코드는 다음과 같습니다.

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");
    }    
}

스레드 예외 "main"java.lang.arrayindexoutofboundsexception : 잘못된 색인 : 02 at com.lowagie.text.pdf.cmapawaredocumentfont.decodesinglecid (com.lowagie.text.pdf.pdf.dext.pdf.dext.dext.decdecode) .lowagie.text.pdf.parser.pdfcontentstreamProcessor.decode (알 수없는 소스) (com.lowagie.text.pdf.pdf.pdf.pdf.pdf.pdf.pdf.pdf.pdfString)의 com.lowagie.text.pdf. (알 수없는 소스)의 com.lowagie.text.pdf.parser.pdfcontentstreamprocessor.invokeoperator (알 수없는 소스)의 com.lowagie.text.pdf.pdf.pdf.pdf.pdfconttresmprocessor.processcontent (Unknown Source)의 com.lowagie. .pdftextextractor.getTextFrompage (알 수없는 소스) com.pdfextractor.main.extractor.main (extractor.java:64)

편집하다: 나는 try/catch를 for loop 내에 넣었습니다.
스택 추적을 추가했습니다
제거 된 색인 = 1

도움이 되었습니까?

해결책

어리석은 질문이지만, 당신이 던지는 것과 같은 패키지에서 캐치에 넣은 arrayindexoutofboundsexception입니까? 즉, Java.lang

또는 아마도 그것이 작동하는지 확인하기 위해 던질 수있는 것을 잡을 수 있습니다.

다른 팁

당신이 호출하는 코드가 ArrayIndexOutOfBoundsException 그리고 스택 추적을 재생하지 않고 자체적으로 인쇄합니다. 이 경우, 당신은 당신의 System.out.println 라고 불리는.

편집 : 계속 따라 잡기를 원한다면 PDFContentStreamProcessor#processContent 잡을 것이다 ArrayIndexOutOfBoundsException 그런 다음 인스턴스를 던지십시오 com.lowagie.text.ExceptionConverter, 그것은 서브 클래스입니다 RuntimeException.

어쩌면 이것은 쉬운 일이 아닙니다 (결국, 나는 지난 36 시간 동안 3 시간 동안 수면을 취하고 있습니다). catch (Exception e)?

분명히 이상적이지 않습니다. Throwable t 제안)은 태양 아래에서 모든 예외를 포착 할 것입니다. ArrayOutOfBoundsException. 아직 시도하지 않았다면 아이디어를 생각했습니다.

이 예외를 사용하는 대신 배열 경계를지나 가지 않도록 코드를 수정해야합니다!

대부분의 배열은 0에서 배열까지 계산됩니다

루프를 이로 교체하면 전체 문제를 피할 수 있습니다.

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

Forloop 내부에 있으려면 시도/캐치가 필요합니다. 컨트롤은 시도 캐치, 캐치 화재로 튀어 나와서 제어를 재개하지만 그 후에는 이미 끝이 종료되었습니다.

    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");
        }
    }

아마도 이것은 어리석은 질문 일 것입니다 ... 예외가 당신이 게시 한 코드에서 다른 방법이 아닌 코드에 던져 졌다고 확신합니까?

프로그램은 작동 했어야합니다. 클래스 이름을 포함한 자세한 내용을 제공해야합니다. 예외를 잡거나 SOP와 함께 마지막으로 블록을 넣어 시도 할 수 있습니다.

이것은 이상합니다 - 실제로 방법에서 itext의 소스를 살펴 보았습니다. 예외는 (cmapawaredocumentfont.decodesinglecid)에서 던졌습니다.

 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");
    }

arrayindexoutofboundsexception은 표준 Java입니다. 나는 당신의 원래 시도 캐치가 작동하지 않는 이유를 볼 수 없습니다.

아마도 전체 수업을 게시해야합니까? 또한 어떤 버전의 itext를 사용하고 있습니까?

잠깐만! 당신은 거기에 약간의 괄호가 빠져 있습니다 :) 당신의 캐치 진술은 당신의 진술을 바깥에 있습니다! 당신은 이것을 가지고 있습니다 :

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");
    }    
}

그것은해야한다:

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top