2011-07-13 10 views
2

このコードではまれにNullPointerExceptionが発生しています。これは、複数のRTSPストリームを同時に消費するビデオストリーミングアプリケーションの一部であり、定期的に(つまりユーザーに基づいて)接続を解除して再接続します。Socket.getInputStream()からNullPointerExceptionがスローされました

private void openSocket() throws IOException { 
    rtspSocket = new Socket(); 
    rtspSocket.connect(new InetSocketAddress(ip, port), connectionTimeout); 
    rtspSocket.setSoTimeout(readTimeout); 

    // NullPointerException on next line 
    bufStream = new BufferedInputStream(rtspSocket.getInputStream()); 
} 

次のようにスタックトレースは次のとおりです。

私のGoogleの-FUはthis bug from Apr 2000this bug from Nov 1997をプルアップしていますが、私は、彼らが適用されます確信していないです。私はビルドしているJDK 1.6 update 7のコードを彷彿とさせましたが、に含まれているFileDescriptorがnullの場合にのみ、この例外が発生することに気付きました。この値は、SocketInputStreamコンストラクタからFileInputStreamコンストラクタに渡されます。

NPEをキャッチしてIOExceptionをスローするのは簡単ではありませんが、ここでできることはありますか?私の疑惑は、FileDescriptorをnullに設定する何らかのIOExceptionが原因であるということです。代わりにIOExceptionがスローされた方がずっと簡単です!

答えて

1

最初のバグは非常に関連しています。もう1つはそうではなく、何年も前にshutdownOutput()を追加して対応しました。

+0

JMFを使用していないことを除いて、関連性があるようです。私はこの動作のJDKに関するバグレポートを見つけることができません。これは修正されていないことを示唆しています。バグ評価は、NPEをキャッチすることを示唆しているので、これが私の最良の選択です。 – Bringer128

0

JVMにバグがあると思われる場合は、Java 6のアップデート26ではなく、7をアップデートしてください。これで問題が解決した場合は、バグであった可能性があります。

+0

大変ありがとうございましたが、私のプロジェクトは、大規模な回帰と統合テストの作業をせずにJVMを更新できる時点ではありません。あなたはそれを知ることができませんでした=) – Bringer128

+0

私は大規模な回帰テストを行うことを示唆していません。この1つの問題をテストすることをお勧めします。それだけで問題が解決すると判断した場合は、適切なアップグレードを行うことを検討しますか? ;) –

関連する問題