Вопрос:

TimerTask против таймера против потока?

java swing

2609 просмотра

1 ответ

71 Репутация автора

Я пытаюсь постоянно показывать дату и время на JLabel. Поэтому в последнем уроке, который я наблюдал, оратор сказал: «Вы должны использовать эти темы всякий раз, когда это необходимо, потому что это занимает память в вашей программе».

Поэтому я ищу другие альтернативы и нахожу Timer и TimerTask, который является наиболее эффективным способом использования в долгосрочной перспективе программы?

Автор: watata Источник Размещён: 12.03.2015 06:07

Ответы (1)


1 плюс

2922 Репутация автора

Решение

Таймер используется для запуска задачи (т. Е. TimerTask) с интервалом, после задержки или их комбинации. В вашем случае вы можете использовать что-то вроде этого:

   java.util.Timer timer = new java.util.Timer();
    timer.schedule(new TimerTask() {
        public void run() {
//            do task
        }
    }, 0, 1000);  //updates every second

Обратите внимание, что для обновления компонента Swing в потоке, отличном от потока Swing, вам необходимо использовать SwingWorker (см. Учебник по параллелизму Swing ) или использовать вместо него таймер Swing . Код ниже использует таймер Swing для обновления метки с новой датой каждую секунду:

javax.swing.Timer timer1 = new javax.swing.Timer(0, new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            label.setText(new Date());
        }
    });

    timer1.setRepeats(true);
    timer1.setDelay(1000);

Я не проверял это, поэтому вам, возможно, придется немного его настроить, чтобы он работал на вас.

Автор: Ali Cheaito Размещён: 12.03.2015 06:29
Вопросы из категории :
32x32