Возврат и синхронизация потоков - PullRequest
0 голосов
/ 06 февраля 2019


Я делаю приложение для карточной игры.У меня есть 2 потока:
Поток curr = здесь сохраняется текущий поток (поток JavaFx)
Поток proHs = вот мозг приложения, которое запускает метод через интерфейс
Я хочу остановить поток proHs остановиться на секунду, пока я не выберу одну из этих двух кнопок мам немам
Затем я должен вернуться true или false .
Я ценю любые предложения и советы. Спасибо!

Я пробовал бесконечный цикл

public boolean biddingStep(int gt) //above this method is @Override, I can't post this with it
{
    System.out.println("  ");
    System.out.println("I HAVE OR NOT PART");
    try {
        proHs.wait();

    }
    catch (Exception e){
        System.out.print(e);
    }
    panelLicitace.setVisible(true);
    mam.setVisible(true);
    nemam.setVisible(true) ;//
    return false;//there would be the resolution of button "mam" or "nemam"


}


РЕДАКТИРОВАТЬ # 1
Что я хочу от вас:

public boolean biddingStep(int gt) //above this method is @Override, I can't post this with it
{
    System.out.println("  ");
    System.out.println("I HAVE OR NOT PART");
    panelLicitace.setVisible(true);
    mam.setVisible(true);
    nemam.setVisible(true) ;//
    // HERE a code i want
    //1. stop proHS thread
    //2. loop program, wait for input from 2 buttons
    //3. return true or false


}

1 Ответ

0 голосов
/ 08 февраля 2019

Во-первых, вам нужно понять, что wait () - это метод класса Object, поэтому он как будто определенный поток ожидает какого-либо действия, связанного с Object.Так что здесь, если biddingStep (int gt) вызывается в потоке proHs, и вы хотите остановить поток proHs, в основном, чтобы дождаться выбора определенной кнопки, тогда вам нужно поместить ожидание в некоторый объект, вВообще это должен быть Объект, на котором должно произойти какое-то действие.Здесь вам нужен список следующих шагов:

  1. ссылка на объект proHs.
  2. установка блокировки на объект proHs.
  3. вызов proHs.wait ().

Из второго потока вы будете выполнять следующие операции: 1. установить блокировку объекта proHs внутри buttonClickListener
второй поток.) ​​2. вызвать proHs.notify ().

class InterfaceImpl {
    Thread proHs;
    boolean btnResponse;
   public boolean biddingStep(int gt) {
       System.out.println("  ");
       System.out.println("I HAVE OR NOT PART");
       panelLicitace.setVisible(true);
       mam.setVisible(true);
       nemam.setVisible(true) ;
       // HERE a code i want
       //1. stop proHS thread
       synchronized(proHs)
       {
         proHs.wait();
        //2. loop program, wait for input from 2 buttons
        //3. return true or false
           return btnResponse;
     }
  }   

  // This method should be called from another thread
  public boolean btnClickListener()
  { 
    btnResponse=true or false
      synchronized(proHs)
       {
         proHs.notify();
       }

   }
}

ЗдесьМетод biddingStep () должен вызываться до btnClickListener (), так что, как только поток будет ожидать, другой поток уведомит об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...