2 u011589986 u011589986 于 2014.09.12 12:37 提问

初学android写的一个通过线程实现“幸运8”的游戏遇到个问题

刚刚开始学习android程序的开发,参照教材自行写了一个“幸运8”的游戏,可一运行手机就会弹出“幸运8已停止运行”的提示,请各位大神教教小弟代码哪里出错了···感激万分

package com.luck8;

import com.luck8.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Luck8Activity extends Activity {
/** Called when the activity is first created. */
Button button1=(Button)findViewById(R.id.button2);
Button button2=(Button)findViewById(R.id.button1);
TextView text1=(TextView)findViewById(R.id.textView1);
TextView text2=(TextView)findViewById(R.id.textView2);
TextView text3=(TextView)findViewById(R.id.textView3);
Thread t;
int x,y,z;
boolean RUN =false;
                            //----------------以上是获取各个按钮和textView的实例
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    button1.setOnClickListener(new Button.OnClickListener() { 
        public void onClick(View v) { 
            start();                        //开始按钮监听事件
        }
    }); 
    button2.setOnClickListener(new Button.OnClickListener() { 
        public void onClick(View v) { 
            stop();                         //停止按钮监听事件
        }
    }); 
}

protected void stop() {
    // TODO Auto-generated method stub
    RUN = false;
    t = null;                       //停止方法
}

protected void start() {
    // TODO Auto-generated method stub
    RUN = true;
    t = new Thread();
    t.start();                      //开始方法
}

@SuppressWarnings("static-access")
public void run(){                      //线程的run方法
    while(RUN){
        x = (int)(Math.random()*10);
        y = (int)(Math.random()*10);
        z = (int)(Math.random()*10);
        text1.setText(String.valueOf(x));
        text2.setText(String.valueOf(x));
        text3.setText(String.valueOf(x));

        try{
            t.sleep(1000);              //线程等待
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

}

1个回答

qq787068730
qq787068730   2014.09.12 18:04
已采纳

控件的初始化要放在onCreate()中
Button button1=(Button)findViewById(R.id.button2);
Button button2=(Button)findViewById(R.id.button1);
TextView text1=(TextView)findViewById(R.id.textView1);
TextView text2=(TextView)findViewById(R.id.textView2);
TextView text3=(TextView)findViewById(R.id.textView3);
改为
Button button1;
Button button2;
TextView text1;
TextView text2;
TextView text3;
然后在setContentView(R.layout.main);下面写:
button1=(Button)findViewById(R.id.button2);
button2=(Button)findViewById(R.id.button1);
text1=(TextView)findViewById(R.id.textView1);
text2=(TextView)findViewById(R.id.textView2);
text3=(TextView)findViewById(R.id.textView3);
最后,别忘了在Manifest中注册你的Luck8Activity

qq787068730
qq787068730 你可以通过继承AsyncTask以及使用Handler,来达到子线程中更新UI的操作
接近 4 年之前 回复
u011589986
u011589986 感谢你的回答,这程序的问题我已经解决了,除了你说的那个问题外,还有一个问题就是在子进程进行setText操作,这是不行的,我改过来后就行了
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!