setText()を使用してハイスコアテキストを更新するたびに、nullポインター例外が発生し、プログラムがクラッシュします。この問題の原因は何ですか?
このコードは、レイアウトを設定したときのもので、レイアウトはopenglを使用したgameViewの一部であり、左上隅にハイスコアのテキストビューを配置します
public void onCreate(Bundle savedInstanceState) {
SFEngine.display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();//ambl ukuran width height layar
super.onCreate(savedInstanceState);
gameView = new SFGameView(this);
gameView.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
RelativeLayout layout = new RelativeLayout(this);
layout.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
TextView textBox = new TextView(this);
textBox.setId(1);
textBox.setText("HIGH SCORE");
textBox.setBackgroundColor(Color.BLUE);
textBox.setWidth(SFEngine.display.getWidth()/2);
textBox.setHeight(50);
Button pauseButton = new Button(this);
pauseButton.setText("PAUSE");
pauseButton.setHeight(50);
pauseButton.setWidth(SFEngine.display.getWidth()/2);
pauseButton.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent e) {
//pause game
SFEngine.isPlaying = false;
Intent i1 = new Intent(SFGames.this, pause.class);
gameView.onPause();
startActivityForResult(i1,0);//hrs pk result soalny mw blk lg
return true;
}
});
RelativeLayout.LayoutParams lp_pause = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout.LayoutParams lp_hs = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp_hs.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
lp_pause.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp_pause.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
textBox.setLayoutParams(lp_hs);
pauseButton.setLayoutParams(lp_pause);
layout.addView(gameView);
layout.addView(textBox);
layout.addView(pauseButton);
setContentView(layout);
これがsetTextコードです
public boolean onTouchEvent (MotionEvent event){//buat nerima input user
if(!SFEngine.isPlaying){
finish();
}
textBox.setText("High Score :" + SFEngine.score);//here is the source of the prob
.....
エラーログ:
10-13 22:38:34.207: E/AndroidRuntime(528): FATAL EXCEPTION: main
10-13 22:38:34.207: E/AndroidRuntime(528): java.lang.NullPointerException
10-13 22:38:34.207: E/AndroidRuntime(528): at com.starfighter.SFGames.onTouchEvent(SFGames.java:136)
10-13 22:38:34.207: E/AndroidRuntime(528): at android.app.Activity.dispatchTouchEvent(Activity.java:2367)
更新:ソースコードを更新したので、textview宣言はonCreateの外にあり、現在は正常に機能しているようです。