按下按钮时如何停止无限循环

时间:2015-04-13 08:00:26

标签: java android multithreading loops

我一直在使用线程来制作使用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)));                     

            } 

    }

2 个答案:

答案 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。