我正在模拟相机馈送,并有一个可以无限循环图像的按钮。 它在单击按钮时启动,单击按钮时应该停止线程,直到再次单击按钮。
现在它启动并循环正常,但是当我再次单击它时它崩溃了
点击时
public void onClick(View v) {
switch(v.getId()){
case R.id.cam1btn:{
if(thread1 == null){
thread1 = new Thread(){
public void run(){
Cam1();
}
};
thread1.start();
}
else
{
thread1.stop();
thread1=(null);
}
}
break;
Cam1功能
protected void Cam1() {
int i=0;
do{
System.out.println("got into loop");
for(int x=0;x<4;x++){
//imgFeed1.setImageAlpha(camFeed1[x]);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
final int temp = x;
mCam1Handler.post(new Runnable(){
public void run(){
imgFeed1.setImageResource(camFeed1[temp]);
}
});
}
}while(i == 0);
}
日志猫
最佳答案
一般来说,您不应该强行停止线程。线程必须通过完成其任务来停止。
在您的情况下,您需要在实例范围中定义 i = 0
并在用户单击停止按钮时将其设置为某个值,这样您的 while 循环就会结束并且线程完成其任务。
我宁愿建议您维护一个 boolean
标志而不是 int
。
更新
好的,那么你应该有一个标志并第一次切换例如:toRun = false
,当用户单击按钮时,你会执行 toRun = !toRun;
。在你的 run 方法中应该有一个 while(toRun) {
//重复你的任务
}
关于java - 按下按钮时启动无限循环线程,再次按下按钮时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924672/