Код работает только условно?

#java #android #if-statement #while-loop

#java #Android #if-оператор #цикл while

Вопрос:

Когда я нажимаю кнопку один раз, цикл while останавливается, и отображается сообщение, но когда я нажимаю его снова, цикл while не запускается снова (я знаю это, потому что сообщение в runnable не отображается).

Кроме того, комбинация while(!boo) в потоке и boo=true; в кнопке не дает никакого результата.

Что я могу делать не так? Я поставил Boolean boo=true; вне onCreate, поэтому я не думаю, что это проблема…

 public class UiTester extends Activity {


    protected static final String TAG = null;

    String s="";

    Button stopper;

    TextView display3;
    //Boolean boo=true;
    int n=0;

    public Boolean boo=true;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        on=(Button) findViewById(R.id.bon);
        off=(Button) findViewById(R.id.boff);
        display=(TextView) findViewById(R.id.tvdisplay);

        display3=(TextView) findViewById(R.id.tvdisplay3);
        stopper=(Button) findViewById(R.id.stops);


        final Handler handler = new Handler();
        final Runnable updater = new Runnable() {
            public void run() {
                n  ;
                display3.setText("System On" n);
            }
        };


        stopper.setOnClickListener(new View.OnClickListener() {


            @Override

            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(boo==true)
                {
                boo=false;
                    display3.setText("System Off");
                }
                else{
                    boo=true;
                }

                }
        });


        Thread x = new Thread() {
            public void run() {
                while (boo) {
                    handler.post(updater);

           //non UI elements can go here
                    try {

                        Log.d(TAG, "local Thread sleeping");
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        Log.e(TAG, "local Thread error", e);
                    }

                }
           }
        };


        x.start();
    }

}
  

Ответ №1:

Когда значение boo равно false, ваш поток просто заканчивается. Это не начнется снова.

Комментарии:

1. О, этого не видел, спасибо! Чтобы реализовать это решение, я попытался ввести boo=false; x.start(); …x не распознается как объект потока. Я думаю, что это может иметь отношение к жизни объекта .. но я не уверен.

2. вы не можете перезапустить поток, вам нужно будет сохранить внешний цикл, который будет входить во внутренний цикл только в том случае, если значение boo равно true