2015-01-14 2 views
-4
new java.util.Timer().scheduleAtFixedRate(timeleft(), 0, 1000); 

Это мой код для метода timeleft(), который я хочу выполнять каждую секунду. Мой класс называется Timer. Не знаю, почему я получаю сообщение об ошибке.График работы с таймером - Java

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

+2

_an error_ Какая ошибка? –

+1

Какая у вас ошибка ... – Kon

+2

На ваш взгляд, что означает 'timeleft()' когда вы пишете его внутри другого метода? – immibis

ответ

0

Как вы можете видеть из javadoc, метод scheduleAtFixedRate принимает первый аргумент TimerTask. Кажется, вы пытаетесь передать результат метода с именем timeleft() с возвращаемым типом void.

Если вам необходимо выполнить некоторый код с фиксированной скоростью, вам необходимо создать объект TimerTask с соответствующей реализацией run и передать его scheduleAtFixedRate.

2

Вы состояние:

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

Я собираюсь рекомендовать вам рассмотреть вопрос о том, чтобы выкинуть код, на который вы задаете свой вопрос, полностью пересмотреть свой подход.

Если вы хотите создать и запустить повторное событие в графическом интерфейсе Swing, не используйте java.util.Timer, как вы это делаете, так как вы можете легко справиться с серьезными проблемами Threading Swing. Вместо этого используйте Swing Timer, таймер, который хорошо работает с Swing, так как весь код в ActionListener Timer гарантированно работает в потоке событий Swing.

Для начала вам, ваш код может выглядеть примерно так:

int timerDelay = 1000; // 1000 msecs or 1 second 
Timer timer = new Timer(timerDelay, new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // code that needs to be repeated goes here 
    } 

}); 
timer.setInitialDelay(0); 
timer.start(); 

Хотя для таймера обратного отсчета, я не уверен, что я бы установить начальную задержку 0. Вместо этого, я Дайте ему подождать период.

+0

Я очень смущен. Помогло бы мне, если бы я отправил свой код?Я использую NetBeans, чтобы сделать свой графический интерфейс, и я создаю события, щелкнув правой кнопкой мыши на кнопках на экране моего графического интерфейса. Я поместил это в один из методов событий и получил массу ошибок. Это было, когда я зависал над созданием таймера: не является абстрактным и не переопределяет абстрактный метод actionPerformed (ActionEvent) в ActionListener – Aria

+0

@Aria: одна из причин, по которым мне не нравится генерация кода NetBeans, поскольку она защищает новички от необходимости знать, как работает библиотека Swing, и поэтому они этого не понимают. Но независимо, если вы видите проблемы, тогда да, почтовый код с любыми сообщениями об ошибках. Но также никогда не отправляйте код, который вы видите на этом сайте, вслепую в вашу программу. Вместо этого заимствуйте идеи, но создайте свой собственный код. Кроме того, когда вы получаете сообщения об ошибках, посмотрите на них критически, потому что они обычно скажут вам, что именно не так. –

Смежные вопросы