Как получить последнее значение переменной в конце урока?

Как получить доступ к последнему значению переменной из другого класса? Программа выполняется за 30 секунд, а в конце 30 секунд она печатает переменные.

Класс игры:

public class Game {
    public int true_num = 0, false_num = 0;

    public Game() throws InterruptedException, IOException {
        new TimerDemo(30);
        while (true) {
            play(); // true_num/false_num are changed in this method.
        }

    }
}

TimerDemo класс:

public class TimerDemo {
        Toolkit toolkit;

    Timer timer;

    public TimerDemo(int seconds) {
        toolkit = Toolkit.getDefaultToolkit();
        timer = new Timer();
        timer.schedule(new RemindTask(), seconds * 1000);
    }

    class RemindTask extends TimerTask {

        @Override
        public void run() {
            System.out.println("Time's up!");

            JLabel lb = new JLabel("true_num = " + true_num
                    + " and " + "false_num = " + false_num);
            lb.setFont(new Font("Arial", Font.BOLD, 18));
            UIManager.put("OptionPane.minimumSize", new Dimension(150, 90));
            JOptionPane.showMessageDialog(null, lb, "aaa", 1);

            toolkit.beep();
            System.exit(0);
        }
    }
}

Как получить доступ к последнему значению переменных в функции воспроизведения в классе Game? вызывается класс вызова play function запускается снова, что не должно.

Дайте TimerDemo ссылку на экземпляр Game, например. через конструктор new TimerDemo(30, this); Также true_num технически должен быть volatile, если вы хотите гарантировать, что задача таймера может считывать фактическое значение

zapl 25.04.2018 22:55

@zapal, я сделал, и все заработало: private final Game get_val; private RemindTask(Game1 aThis) { get_val = aThis; } и get_val.true_num. но игра снова запускается по истечении 30 секунд.

ParisaN 25.04.2018 23:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Без ссылки из Game, я добавил Game.total и определил сумму летучий в Game.

В TimerDemo:

public void run() {
     System.out.println("Time's up! Total = " + Game.total + "true_num  = " + Game.true_num + "false_num  = " + Game.false_num);
}

В игре:

public static volatile int true_num = 0, false_num = 0, total = 0;

Другие вопросы по теме