Android 我试图制作一个简单的线程,在一段时间后更改textview
问题是,当我第二次点击按钮时,我的应用程序崩溃了,我不明白为什么。当我第二次按按钮的时候,我想我又是一样的了 感谢您的帮助Android 我试图制作一个简单的线程,在一段时间后更改textview,android,multithreading,handler,ui-thread,Android,Multithreading,Handler,Ui Thread,问题是,当我第二次点击按钮时,我的应用程序崩溃了,我不明白为什么。当我第二次按按钮的时候,我想我又是一样的了 感谢您的帮助 public class main extends Activity { Boolean grabar = false; TextView texto; /** Called when the activity is first created. */ @Override public void onCreate(Bundle
public class main extends Activity {
Boolean grabar = false;
TextView texto;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
texto = (TextView) findViewById(R.id.texto);
Button startbtn = (Button) findViewById(R.id.button);
startbtn.setOnClickListener(new OnClickListener(){
public void onClick(View v){
background.start();
}
});
}
Thread background = new Thread (new Runnable() {
public void run() {
try {
Thread.sleep(3000);
cambiarHandler.sendEmptyMessage(0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
Handler cambiarHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
texto.setText("ok");
}
};
}
我看到的问题是线程被设计为只运行一次。每次希望运行线程时,都需要创建一个新的线程实例。我看到的问题是,线程设计为只运行一次。每次运行线程时,您都需要创建一个新的线程实例。这可能与Android只允许UI线程修改UI的策略有关 如果要从单独的线程修改UI,则应该使用ASyncTask 请看这里:
这可能与Android只允许UI线程修改UI的策略有关 如果要从单独的线程修改UI,则应该使用ASyncTask 请看这里:
我不知道抛出了哪个异常。我猜是NPE扔的。当您尝试将文本设置为
TextView
时。尝试在handleMessage()
方法中实例化TextView
:
Handler cambiarHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
texto = (TextView) findViewById(R.id.texto);
texto.setText("ok");
}
};
在onClick方法中,每次单击按钮时,都会创建新的线程实例
public void onClick(View v){
new Thread (new Runnable() {
public void run() {
try {
Thread.sleep(3000);
cambiarHandler.sendEmptyMessage(0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
我不知道抛出了哪个异常。我猜是NPE扔的。当您尝试将文本设置为
TextView
时。尝试在handleMessage()
方法中实例化TextView
:
Handler cambiarHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
texto = (TextView) findViewById(R.id.texto);
texto.setText("ok");
}
};
在onClick方法中,每次单击按钮时,都会创建新的线程实例
public void onClick(View v){
new Thread (new Runnable() {
public void run() {
try {
Thread.sleep(3000);
cambiarHandler.sendEmptyMessage(0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
如果您试图启动一个已经运行的线程,它将抛出一个错误,您需要将整个线程(实例化和全部)放在按钮中。我不想讨论这是个好主意还是个坏主意,只是说这是如何让它工作的。一开始,我添加了一些新的东西,完成后,我点击按钮,应用程序就退出了。有什么想法吗??提前感谢如果您尝试启动一个已经运行的线程,它将抛出一个错误,您需要将整个线程(实例化和全部)放在按钮中。我不想讨论这是个好主意还是个坏主意,只是说这是如何让它工作的。一开始,我添加了一些新的东西,完成后,我点击按钮,应用程序就退出了。有什么想法吗??提前谢谢