-1

每次我想使用 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 之外,它现在似乎工作正常..

4

4 回答 4

0

您应该将文本视图定义为活动中的类字段,在onCreate

TextView textBox;

public void onCreate(Bundle savedInstanceState) {
    ....
    textBox = new TextView(this);
}
于 2012-10-12T09:37:21.020 回答
0

textBoxonCreate()方法中的一个局部变量。我认为您也有一个同名的成员变量。所以你实际上用错了。

尝试删除TextView您的onCreate()

// in onCreate
textBox = new TextView(this);
textBox.setId(1);
textBox.setText("HIGH SCORE");
于 2012-10-12T09:37:57.973 回答
0

将 TextView 声明放在 onCreate() 之外

TextView textBox;

public void onCreate(Bundle savedInstanceState) {
    textBox = (TextView)findViewById(id.TextBoxNameFromLayout);
}
于 2012-10-12T09:38:45.147 回答
-1

您的文本框应定义为全局变量。

像这样

class MyActivity extends Activity{
    TextView textBox = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        textBox = new TextView(this);
于 2012-10-12T09:37:33.943 回答