2017-03-23 8 views
-2

使用したいrunOnUiThread UIグループ内でスレッドを使用するかどうかは、アンドロイドUIがシングルスレッドモデルであるため、ハンドラを使用する必要があります。runOnUiThreadを使用する必要がありますが、利用時にnullpointerExceptionが発生します

だから私はrunOnUiThread

public class VideoCap implements GLSurfaceView.Renderer { 

private static TextView sTextView; //global variable 
private Context context; 

private VideoCap(GLSurfaceView surface, TextView textView) { 
    this.context = context; 
    sTextView = textView; 
} 


public void showText(final TextView textView) { 
    sTextView = textView; 
    sTextView.findViewById(R.id.text); 

    ((Activity)context).runOnUiThread(new Runnable() { //NPE 
     @Override 
     public void run() { 
      sTextView.setText("MyVideoRendererGui~~"); 
      sTextView.setTextColor(Color.RED); 
     } 
    }); 

} 
} 

を使用logcat

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.runOnUiThread(java.lang.Runnable)' on a null object reference 
                at com.example.unno.mywebrtc.MyVideoRendererGui.showText(MyVideoRendererGui.java:90) 
                at com.example.unno.mywebrtc.MyVideoRendererGui.onDrawFrame(MyVideoRendererGui.java:449) 
                at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1535) 
                at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

は、文脈上の問​​題により、おそらく引き起こされますか? nullpointerExceptionを発生させずに、どのようにrunOnUiThreadを使用しますか?

ありがとうございました。あなたのコンストラクタは、あなたが期待してcontextがそこに設定されていないとして、それが呼び出されていないprivateであるだけでなく、

答えて

0

あなたのコンテキストがnullです。あなたが何かのように実行する必要があります。注意点として

getApplicationContext().runOnUiThread(new Runnable() { 

または

getActivity().runOnUiThread(new Runnable(){ 

を、あなたのコンストラクタにコンテキストを設定することはありません。プライベートコンストラクタは、あなたのクラス内のメソッドは、あなたのコンテキストがnullの理由もあり、あなたのオブジェクトを、構築することができることを意味した、また

private VideoCap(GLSurfaceView surface, TextView textView, Context context) { 
    this.context = context; 
    sTextView = textView; 
} 

:あなたのような何かをしなければならないでしょう。コンストラクタをパブリックにするか、クラス内からオブジェクトを作成する方法を見つける必要があります。

+0

私のクラスはアクティビティではありません。したがって、getApplicationContext()を使用しないでください。runOnUiThread(new Runnable(){' – chohyunwook

+0

)' getActivity() 'を使用してください。 – BlackHatSamurai

+0

同様に、getActivity()を使用しないでください。 – chohyunwook

0

は、したがって、それはnull

関連する問題