ArrayIndexOutOfBoundsExceptionがキャッチされ、無視されていません
-
20-09-2019 - |
質問
私がキャッチして無視して、ArrayIndexOutOfBoundsExceptionがエラーにしたい(基本的に、それは私がコントロールの上に持っているものではないですので、私は一緒に一気飲み保つために、私のプログラムが必要です)。
しかし、私のtry / catchのペアは、例外をキャッチし、それを無視していないようです。うまくいけば、あなたは私が間違っているのかを選ぶことができます。
例外はこのライン
で発生します。
コンテンツ= 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");
}
}
スレッド「メイン」java.lang.ArrayIndexOutOfBoundsExceptionの例外:無効なインデックス:02 com.lowagie.text.pdf.CMapAwareDocumentFont.decodeSingleCIDで(不明なソース) com.lowagie.text.pdf.CMapAwareDocumentFont.decodeで(不明なソース) com.lowagie.text.pdf.parser.PdfContentStreamProcessor.decodeで(不明なソース) com.lowagie.text.pdf.parser.PdfContentStreamProcessor.displayPdfStringで(不明なソース) com.lowagie.text.pdf.parser.PdfContentStreamProcessor $ ShowText.invoke(不明なソース)で、 com.lowagie.text.pdf.parser.PdfContentStreamProcessor.invokeOperatorで(不明なソース) com.lowagie.text.pdf.parser.PdfContentStreamProcessor.processContentで(不明なソース) com.lowagie.text.pdf.parser.PdfTextExtractor.getTextFromPageで(不明なソース) com.pdfextractor.main.Extractor.mainで(Extractor.java:64)
編集の私はforループ
内のtry / catchを入れて、スタックトレース
や削除、インデックス= 1
解決
愚かな質問が、あなたがスローされるものと同じパッケージからキャッチに入れArrayIndexOutOfBoundsExceptionがありますか?即ちれるjava.lang
それとも、それも動作するかどうかを確認するためにスロー可能オブジェクトをキャッチします。
他のヒント
あなたが呼び出しているコードはArrayIndexOutOfBoundsException
を処理し、それを再スローすることなく、独自にスタックトレースを印刷している可能性があります。その場合は、あなたのSystem.out.println
と呼ばれる表示されません。
EDIT:あなたが一緒に一気飲み続けたい場合は、それは知って良いだろうと<のhref =「http://www.1t3xt.com/downloads/source/?page=code&id=1409」のrel =」 noreferrer nofollowを "> PDFContentStreamProcessor#processContent
のはArrayIndexOutOfBoundsException
をキャッチして、その<のhref =のインスタンスがスローされます" http://www.1t3xt.info/api/com/lowagie/text/ExceptionConverter.html "RELを=" com.lowagie.text.ExceptionConverter
のサブクラスであるnoreferrer nofollowを "> RuntimeException
で、ます。
多分これは、(結局、私は最後の36時間で、睡眠の3時間で実行している)非常に簡単ではありませんが、digiarnieとはAnkurが言及したものの線に沿って:あなたは、単にcatch (Exception e)
試してみました。
Throwable t
提案と一緒に)ArrayOutOfBoundsException
に限定されるものではなく、太陽の下ですべての例外をキャッチされますので、これは、間違いなく理想的ではありません。ちょうどあなたがそれをまだ試していない場合はそこにアイデアを考えています。
の代わりにこの例外を使用してのあなたは過去、配列の境界を行かないように、あなたのコードを修正する必要があります!
ほとんどの配列がするまで0からカウントArray.lengthと-1
あなたはこれでループのためにあなたを交換する場合は、、あなたはこれが全体の問題を回避します。
for (int page = 0;page < noPages;page++){
あなたはforループの内側にあることをのtry / catchを必要としています。コントロールがトライキャッチ、キャッチ火災に飛び出し、その後制御を再開しますが、ループのため、すでに終了しています。
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");
}
}
おそらくこれは愚かな質問です...あなたは、例外が、あなたがdifferen方法に掲載していないコードでスローされていることを確認していますか?
プログラムが働いているはずです。あなたのクラス名を含む詳細を与える必要があります。あなたは、例外をキャッチするか、最終的にはそれにいくつかのs.o.pにブロックを置くことによって試すことができます。
これは奇妙である - 私は実際に例外が(CMapAwareDocumentFont.decodeSingleCID)からスローされた方法でiTextののソースを見ていたし、それはこのようになります:
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ののどのバージョンを使用していますか?
ちょっと待って!あなたのキャッチステートメントは、あなたの文の外にある:)あなたはそこにいくつかの括弧を逃しています!あなたはこれを持ってます:
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