Почему мое расписание таймера не выполняется при параллельном вызове другого метода? - Java - PullRequest
0 голосов
/ 07 мая 2020

У меня есть библиотека, метод которой вызывает ранее установленный слушатель (с лямбда-выражением), а затем планирует задачу, чтобы повторить метод еще раз. Проблема в том, что когда программа, использующая эту библиотеку, получает ответ слушателя, если я вызываю другой метод, запланированная задача никогда не запускается.

Это код из библиотеки:

    public void checkLicense(String licenseSerial, String productName) {
                ...

                checkInfo.setReason("VALID");
                this.listener.checkResult(checkInfo);

                time.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        checkLicense(licenseSerial, productName);
                    }
                }, 5000); //Check again in 5 seconds

И это код из программы, которая устанавливает слушателя (с лямбда-выражением, указывающим действия) и вызывает библиотеку (Licencheck):

  while(typeLicense==null){            
            licencheck.addInvalidLicenseListener(checkInfo -> {
                switch (checkInfo.getReason()){
                    case ("VALID"):{
                        System.out.println("Valid Serial!");
                        serial[1]="ok";
                        Game game = new Game();
                        game.start(); //If I do this call, the Task scheduled doesn't execute
                        break;
                    }

                }
            });

 licencheck.checkLicense(serial[0],"ExampleLicencheck");


И game.start () вызывает это Кажется, что это не позволяет запускать задачу:

    public void start(){

        while(true){
           ...
        }
    }

В резюме: если слушатель отвечает "Valid" и нет вызова game.start (), checkLicense выполняется снова (как есть предыдущее запланированное задание). Если я включаю в действия ответа вызов game.start (), он запускает этот метод и не выполняет задачу.

...