Это кажется на вероятный удар F5 в Visual Studio при получении этой ошибки?
существует несколько вещей, которые можно попробовать. Самое легкое должно совершить нападки кнопка Stop прежде, чем поразить F5. Дополнительно, когда Вы закончены, отладив, и начиная вносить изменения можно перейти в меню Debug и выбрать Stop Debugging или Оконечный Весь .
Глупый вопрос, но есть ли исключение ArrayIndexOutOfBoundsException, которое вы добавили в уловку из того же пакета, что и выброшенный? т.е. java.lang
Или, возможно, перехватить throwable, чтобы посмотреть, работает ли это вообще.
Возможно, что вызываемый вами код обрабатывает исключение ArrayIndexOutOfBoundsException
и самостоятельно печатает трассировку стека, не создавая ее повторно. В этом случае вы не увидите вызова System.out.println
.
РЕДАКТИРОВАТЬ: Если вы хотите продолжить работу, было бы хорошо знать, что PDFContentStreamProcessor # processContent
перехватит ArrayIndexOutOfBoundsException
, а затем выбросит экземпляр его com.lowagie.text.ExceptionConverter
, который является подклассом RuntimeException
.
Вместо использования этого исключения вы должны исправить ваш код, чтобы вы не выходили за границы массива!
Большинство массивов считает от 0 до array.length-1
Если вы замените цикл for этим, вы можете полностью избежать проблемы:
for (int page = 0;page < noPages;page++){
Может быть, это и понятно (в конце концов, я сплю 3 часа за последние 36 часов), но в соответствии с тем, что упоминали digiarnie и Ankur: есть ли у вас попробовал просто catch (Exception e)
?
Это определенно не идеально, поскольку очевидно, что он (вместе с предложением Throwable t
) будет перехватывать все исключения под солнцем, не ограничиваясь ArrayOutOfBoundsException
. Просто придумал идею, если вы еще не пробовали.
вам нужно, чтобы try / catch находился внутри цикла forloop. control выскакивает на try catch, catch срабатывает и после этого возобновляет управление, но цикл 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");
}
}
Программа должна была работать. Вы должны указать более подробную информацию, включая название вашего класса. Вы можете попробовать перехватить Exception или поместить в него блок finally с некоторой подачкой.
Это странно - я действительно взглянул на источник 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 вы используете?
Возможно, это глупый вопрос ... Вы уверены, что исключение возникает в опубликованном вами коде, а не в другом методе?
Подождите секунду! Вам не хватает фигурных скобок :) Ваш оператор 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