我得到一个空指针异常,每次我想使用setText()更新高分文本时程序都会崩溃。是什么导致了这个问题? 这段代码是我设置布局时,布局是使用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之外,它现在似乎正常工作..
答案 0 :(得分:0)
您应该在onCreate
:
TextView textBox;
public void onCreate(Bundle savedInstanceState) {
....
textBox = new TextView(this);
}
答案 1 :(得分:0)
您的textBox
是onCreate()
方法中的局部变量。我认为你也有一个同名的成员变量。所以你实际上使用了错误的。
尝试删除TextView
onCreate()
// in onCreate
textBox = new TextView(this);
textBox.setId(1);
textBox.setText("HIGH SCORE");
答案 2 :(得分:0)
将TextView声明放在onCreate()
之外TextView textBox;
public void onCreate(Bundle savedInstanceState) {
textBox = (TextView)findViewById(id.TextBoxNameFromLayout);
}
答案 3 :(得分:-1)
您的文本框应定义为全局变量。
像这样class MyActivity extends Activity{
TextView textBox = null;
@Override
public void onCreate(Bundle savedInstanceState) {
...
textBox = new TextView(this);