我一直在使用线程来制作使用nxt的线跟随器机器人的java / android。该代码包含一个while循环为true。我希望通过将其设置为false来阻止它,但它只响应片刻,然后再次运行循环。否则它将冻结应用程序,因为它陷入循环。可能我应该使用处理程序线程?我不能使用break,因为它只会执行一次读取,然后停止。
我是java的新手,如果你对此有所了解,请分享你的知识。如果我不能很好地解释我的问题,我很抱歉。 谢谢
@Override
public void run(){
threadRunning=true;
int min = 30, max = 37, readLight = 0, Mspeed = 90, Mspeed2 = 20;
LightSensor ls = new LightSensor(SensorPort.S3);
while(threadRunning){
Motor.A.forward();
Motor.C.forward();
readLight = ls.readValue();
LeJOSDroid.sendMessageToUIThread("Sensor: "+ls.readValue());
if (readLight < min){
readLight = min+1;
}
if (max < readLight){
readLight = max-1;
}
Motor.C.setSpeed(Mspeed + (Mspeed2 * (readLight - min)));
Motor.A.setSpeed(Mspeed + (Mspeed2 * (max - readLight)));
}
}
答案 0 :(得分:1)
我假设您的活动中有按钮。如果您正在使用java线程,则可以调用interrupt()方法。然后将onClickListener添加到按钮:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
yourThread.interrupt();
}
});
而使用while(true),你可以在你的线程中使用它:
while(!Thread.currentThread().isInterrupted()) {
// do something here
}
提醒我,如果我的答案不好^^
答案 1 :(得分:0)
使用这样的线程:
private void runThread(){
new Thread(new Runnable() {
@Override
public void run() {
while(!breakLoop){
// do something in loop
Log.v("Thread", "- Running");
}
}
}).start();
}
并通过false初始化标志“breakLoop”并单击停止按钮,您可以将标志设置为true。