Java: Как я могу «сломать» коммутатор после определенного времени? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть метод, который отображает элементы.

Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы корпус коммутатора сломался через 4,1 секунды.Я не хочу использовать Thread.sleep, потому что он замерзнет во время выполнения всего экрана.

Это то, что я пробовал, но это не работает:

private void drawItems(){
       itemSelected = randomInt.getValue3();
       switch (itemSelected){
           case 0: if (!Obstacle.case0) {
               doSomething();
           }
               new java.util.Timer().schedule(
                       new java.util.TimerTask() {
                           public void run() {
                                break;
                           }
                       },
                       4100
               );
// other cases

IЯ хочу сломать его, потому что в противном случае на экране отображается более 1 элемента, но проблема в том, что «разрыв» должен быть вне переключателя или цикла.

Ответы [ 3 ]

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

Вы действительно не должны запускать потоки вообще, просто обрабатывайте время, используя дельта-время, вы также можете создать обертку позже:

Как настроить таймер в LIBGDX

вот моя реализация таймера: libgdx Внедрение обратного отсчета таймера

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

У меня недостаточно репутации, чтобы комментировать, но я бы не использовал нативные потоки Java для решения этой проблемы, как предлагают люди.Я заметил, что этот пост был помечен с помощью Libgdx.Libgdx прямо заявляет в своей документации, что потоки не поддерживаются, поэтому я бы с осторожностью использовал их.

Что вам следует делать, так это вызывать функцию drawItems через определенные промежутки времени.Libgdx имеет свои собственные классы таймеров, которые, как я полагаю, используют тот же поток, что и основной поток (хотя не цитируйте меня об этом, я бы наверняка воспользовался ответом Хлинка).Удалите расписание таймера из вашего текущего кода и переместите его к тому, что вызывает функцию drawItems, перезапуская таймер каждый раз, когда он завершается, так что таймер зацикливается, если хотите.Сейчас я нахожусь на своем телефоне, поэтому позже выскочу на рабочий стол и отправлю код.

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

В простейшей форме, что-то вроде:

public class DrawingThread extends Thread {
    private boolean goon = true;

    public void run() { 
        //Drawing routine.. stop if goon is no longer true
    }

    public void requestStop() {
        goon = false;
    }
 }

Затем в вашем основном классе / классе драйвера и т. Д .:

 DrawingThread dThread = new DrawingThread();
 dThread.start();
 //Other things, for instance try { Thread.sleep(4100) } catch (InterruptedException ie) {}
 dThread.requestStop();

Некоторые указатели на Jenkov.com также в документации Oracle по Java.Если это хорошо для вас, посмотрите на повторное использование объектов Thread, возможно, что-то под пунктом 26 на боковой панели на этой странице было бы полезно.

...