2012-04-26 6 views
-1

私が原因で、それはおそらくすぐに破壊されます(サイズは150キロバイトより低い)出力ストリームに書き込むためにオブジェクトを作成していた場合:Android - GCが突然オブジェクトを削除するのはなぜですか?

System.out.println("Sending object.."); 
Packet p = new Packet(mJpegData); // here exists 
System.out.println(p); // reference exists 
oos.writeObject(p); // null exception error 

フルエラー:

04-26 21:37:01.414: W/System.err(12888): java.lang.NullPointerException 
04-26 21:37:01.414: W/System.err(12888): at pl.aadamczyk.webcamera.Preview$PreCallback.onPreviewFrame(Preview.java:148) 
04-26 21:37:01.417: W/System.err(12888): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:583) 
04-26 21:37:01.417: W/System.err(12888): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-26 21:37:01.417: W/System.err(12888): at android.os.Looper.loop(Looper.java:130) 
04-26 21:37:01.417: W/System.err(12888): at android.app.ActivityThread.main(ActivityThread.java:3687) 
04-26 21:37:01.417: W/System.err(12888): at java.lang.reflect.Method.invokeNative(Native Method) 
04-26 21:37:01.417: W/System.err(12888): at java.lang.reflect.Method.invoke(Method.java:507) 
04-26 21:37:01.417: W/System.err(12888): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
04-26 21:37:01.417: W/System.err(12888): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
04-26 21:37:01.417: W/System.err(12888): at dalvik.system.NativeStart.main(Native Method) 
04-26 21:37:01.472: D/dalvikvm(12888): GC_FOR_MALLOC freed 1152K, 57% free 2820K/6535K, external 1596K/2108K, paused 17ms 
04-26 21:37:01.472: I/System.out(12888): My Object has been GC'd. [email protected] 
04-26 21:37:01.523: D/dalvikvm(12888): GC_CONCURRENT freed 28K, 50% free 3311K/6535K, external 1596K/2108K, paused 3ms+10ms 

「私のオブジェクトが持っていますGC "されました。"はPacketのファイナライザによって印刷されます。

コード全体:http://pastebin.com/zc5TcSgY

なぜGSは私のオブジェクトを削除しますか?私は約120 MBの空きメモリがあります。

修正方法?

+4

を全体のスタックトレースを投稿してください。エラーを間違って解釈している可能性があります。 – CommonsWare

+2

エラーが発生した場合は、oosはnullです。何もありません – Snicolas

答えて

4

NullPointerExceptionの原因になる可能性がありますので、問題はoosと思われます。

少し以下のようにあなたのコードに変更します。

System.out.println("Sending object.."); 
Packet p = new Packet(mJpegData); // here exists 
System.out.println(p); // reference exists 

if(oos != null) 
    oos.writeObject(p); 
else 
    Log.w("oos", "its null"); 
+0

これは正しいですが、私はoosを作成し、クラスフィールドに格納しています。作成後はnullではありませんが、送信する前にnullになります。なぜですか? –

+0

あなたのコード全体を見ることなくあなたに伝えることができません...おそらくあなたは* null *どこかに設定しています – waqaslam

+0

これを示すのは残念ですが、それをキャッチしてください:http://pastebin.com/zc5TcSgY –

関連する問題