ArrayIndexOutOfBoundsException, не будучи пойманным и проигнорированный

Это кажется на вероятный удар F5 в Visual Studio при получении этой ошибки?

существует несколько вещей, которые можно попробовать. Самое легкое должно совершить нападки кнопка Stop прежде, чем поразить F5. Дополнительно, когда Вы закончены, отладив, и начиная вносить изменения можно перейти в меню Debug и выбрать Stop Debugging или Оконечный Весь .

5
задан wattostudios 6 May 2012 в 03:58
поделиться

10 ответов

Глупый вопрос, но есть ли исключение ArrayIndexOutOfBoundsException, которое вы добавили в уловку из того же пакета, что и выброшенный? т.е. java.lang

Или, возможно, перехватить throwable, чтобы посмотреть, работает ли это вообще.

3
ответ дан 13 December 2019 в 19:29
поделиться

Возможно, что вызываемый вами код обрабатывает исключение ArrayIndexOutOfBoundsException и самостоятельно печатает трассировку стека, не создавая ее повторно. В этом случае вы не увидите вызова System.out.println .

РЕДАКТИРОВАТЬ: Если вы хотите продолжить работу, было бы хорошо знать, что PDFContentStreamProcessor # processContent перехватит ArrayIndexOutOfBoundsException , а затем выбросит экземпляр его com.lowagie.text.ExceptionConverter , который является подклассом RuntimeException .

4
ответ дан 13 December 2019 в 19:29
поделиться

Вместо использования этого исключения вы должны исправить ваш код, чтобы вы не выходили за границы массива!

Большинство массивов считает от 0 до array.length-1

Если вы замените цикл for этим, вы можете полностью избежать проблемы:

for (int page = 0;page < noPages;page++){
1
ответ дан 13 December 2019 в 19:29
поделиться

Может быть, это и понятно (в конце концов, я сплю 3 часа за последние 36 часов), но в соответствии с тем, что упоминали digiarnie и Ankur: есть ли у вас попробовал просто catch (Exception e) ?

Это определенно не идеально, поскольку очевидно, что он (вместе с предложением Throwable t ) будет перехватывать все исключения под солнцем, не ограничиваясь ArrayOutOfBoundsException . Просто придумал идею, если вы еще не пробовали.

3
ответ дан 13 December 2019 в 19:29
поделиться

вам нужно, чтобы try / catch находился внутри цикла forloop. control выскакивает на try catch, catch срабатывает и после этого возобновляет управление, но цикл forloop уже был прерван.

0
ответ дан 13 December 2019 в 19:29
поделиться
    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");
        }
    }
0
ответ дан 13 December 2019 в 19:29
поделиться

Программа должна была работать. Вы должны указать более подробную информацию, включая название вашего класса. Вы можете попробовать перехватить Exception или поместить в него блок finally с некоторой подачкой.

0
ответ дан 13 December 2019 в 19:29
поделиться

Это странно - я действительно взглянул на источник 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. Я не вижу причин, по которым ваш оригинальный try-catch не работает.

Может, тебе стоит опубликовать весь класс? Кроме того, какую версию itext вы используете?

0
ответ дан 13 December 2019 в 19:29
поделиться

Возможно, это глупый вопрос ... Вы уверены, что исключение возникает в опубликованном вами коде, а не в другом методе?

0
ответ дан 13 December 2019 в 19:29
поделиться

Подождите секунду! Вам не хватает фигурных скобок :) Ваш оператор catch находится за пределами вашего оператора for! У вас есть:

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
0
ответ дан 13 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: