2011-04-16 24 views
0

私は、石英スケジューラタスクによって実行されるフローの一部であるvoidメソッドを持っています。なぜこのコードが例外をスローしますか?

このメソッドの内容は、このコードです:

try { 
     InputStream ris = this.getClass().getResourceAsStream("arialuni.ttf"); 
     byte[] ttfAfm = new byte[1]; 
     if (ris != null) { 
      System.out.println("toByteArray START"); 
      ttfAfm = IOUtils.toByteArray(ris); 
      System.out.println("toByteArray END"); 
     } else 
      System.out.println("input stream from arailuni.ttf is null!!!"); 
     ris.close(); 
     ris = null; 
     bfChinese = 
       BaseFont.createFont("arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true, ttfAfm, null); 
     System.out.println("in myinit() try catch END"); 
    } catch (Exception e) { 
     System.out.println("exception encountered at myinit() " + e); 
    } 

それはこの作品の素敵約30倍(基本的には、スケジューラは、ディレクトリをスキャンし、任意のPCLを取ったし、PDFに変換していることは非常に奇妙ですこのARIALUNI.TTFフォントを使用して)が、突然、それはfollwing例外与える:IOUtils.toByteArray(ris)

19:06:24,316 INFO [STDOUT] toByteArray START 
19:06:28,218 ERROR [ReportPollingJob] java.lang.reflect.InvocationTargetExceptio 
n 
//nothing else here (yes, the exception is only one line...) 

メモリのためにできますか? それは私のキャッチに行かないが、この例外をスローするのは非常に奇妙です...

ヒントはありますか?

UPDATE:MDMAのおかげ:私は(のThrowable e)をキャッチするために変更しましたし、今私が参照してください。

解決することは容易ではないだろう
java.lang.OutOfMemory: JavaHeap Space 

...

+1

実際に何が不平になっているかについて、例外に関する詳細情報はありますか? – BugFinder

+0

これは基本的に主な問題です。私はこの短いエラーの後に他の出力を持っていません。 –

+0

通常、Javaは非常に例外的にボーカルです。しばしばあなたが望んでいなかった点まで。 – BugFinder

答えて

2

InvocationTargetException実際の例外のラッパーに過ぎないので、それを分析する必要があります(getCause()経由)。おそらくOutOfMemoryErrorであり、サブクラスはExceptionではありません。すべてのエラー状態をキャッチするには、代わりにThrowableをキャッチします。

1

これはおそらく、あなたが見ているエラーには関係ありませんが、それは誤りです:

RISがnullの場合は、NullPointerExceptionが取得します。あなたは

System.out.println("input stream from arailuni.ttf is null!!!"); 

後メソッドを終了するには持っているか、それは次のNullPointerExceptionが生じ

ris.close() 

実行しようとウィル。リソースを操作するとき

+1

+1を使用してください。その点をありがとう。 –

0
try { 
    InputStream ris = this.getClass().getResourceAsStream("arialuni.ttf"); 
    byte[] ttfAfm = new byte[1]; 
    if (ris != null) { 
     System.out.println("toByteArray START"); 
     ttfAfm = IOUtils.toByteArray(ris); 
     System.out.println("toByteArray END"); 
    } else 
     System.out.println("input stream from arailuni.ttf is null!!!"); 
    ris.close(); // it will through NullPointerException in ris is null 
    ris = null; 
    bfChinese = 
    BaseFont.createFont("arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true, ttfAfm, null); 
    System.out.println("in myinit() try catch END"); 
} catch (Exception e) { 
    System.out.println("exception encountered at myinit() " + e); 
} 

良い方法は以下の通り

InputStream resource; 
try { 
    resource = createResource(); 
    //use resource object whatever way you want 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
finally { 
    if(resource != null) { 
     resource.close(); 
    } 
} 

手順上記のようなリソースのいずれかの種類のための真のです。

関連する問題