Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> таймер в Java, какие есть? 
:(
    Опции темы
Berliner
Дата 27.1.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



есть ли в в Java какой нить таймер наподобие как в Delphi чтобы можно было через какое нить время производить определенные действия?
PM   Вверх
powerOn
Дата 27.1.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



смотри java.util.Timer


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Berliner
Дата 27.1.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Спасиб посмотрю
PM   Вверх
Enflout
Дата 27.1.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 22.5.2004

Репутация: 1
Всего: 6



PM MAIL   Вверх
powerOn
Дата 27.1.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



даже побробней расскажу smile
Вот пример:

Код

TimerTask task = new TimerTask() {

       public void run() {
                System.out.println("Test");
            }
        }; 
        Timer timer = new Timer();
        timer.schedule(task, (long) 1000, (long) 1000);


Сначало создаем TimerTask - это тот поток, который мы хотим выполнять с определенным
интервалом. Твой код должен находится в методе run() - именно он и будет выполняться.
Потом создаем объект таймер - Timer - он будет управлять запуском taska (задачи).
Метод schedule объекта Timer, в данном случае имеет 3 параметра:
первый - TimerTask - задача для выполнения,
второй - long delay - задержка пред выполнением задачи в милисекундах,
третий - long period - время в миллисекундах между корректными завершениями задачи.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
chief39
Дата 27.1.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Ещё вдогонку:

Частенько понадобится сохранять состояния между вызовами и накапливать информацию:
унаследуй свой класс "Задача" от TimerTask и переопредели метод run()
Тогда сможешь не только выполнять ЧТО-ТО,но и иметь доступ к объекту задачи извне.

На всяк случай:
есть ещё scheduleAtFixedRate, абсолютно аналогичный schedule, только выполняться будет через РАВНЫЕ промежутки времени (т.е. без учёта времени на выполение одного таска). Отмеряет новый цикл от НАЧАЛА ВЫПОЛНЕНИЯ ПРЕДЫДУЩЕГО ТАСКА, а не от ЗАВЕРШЕНИЯ ПРЕДЫДУЩЕГО ТАСКА.

Завершить этот вечный "повторизм" можно:
Код

timer.cancel();


Это сообщение отредактировал(а) chief39 - 27.1.2006, 18:00


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Berliner
Дата 10.3.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Код приведенного выше примера не работает. Пишел TimerTask -абстрактій класс
Вот код
Код

TimerTask task = new TimerTask() {
       public void run() {
                System.out.println("Test");
            }
        }; 
        Timer timer = new Timer();
        timer.schedule(task, (long) 1000, (long) 1000);




я думаю надо так

Код

class RTimerTask extends TimerTask
RTimerTask task = new RTimerTask() {
       public void run() {
                System.out.println("Test");
            }
        }; 
        Timer timer = new Timer();
        timer.schedule(task, (long) 1000, (long) 1000);




PM   Вверх
LSD
Дата 10.3.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Berliner @ 10.3.2006, 12:07)
Код приведенного выше примера не работает. Пишел TimerTask -абстрактій класс
Вот код
Код

TimerTask task = new TimerTask() {
       public void run() {
                System.out.println("Test");
            }
        }; 
        Timer timer = new Timer();
        timer.schedule(task, (long) 1000, (long) 1000);


Этот код работает. TimerTask действительно абстрактный, но ты же от него наследуешь и переопределяешь run(). Приведи код полностью и сообщение компилятора.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Berliner
Дата 13.3.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Да - работает, если пописать этот код в методе мєйн .
А как создать какой нить класс например для работы с TimerTask и Timer
чтобы потом вызвать метод в main?
я так понимаю если класс обстрактый то нужно создать реальный класс
который наследует методы от абстрактоного класса

class RealTimerTask extends TimerTask
RealTimerTask task = new RealTimerTask()

PM   Вверх
powerOn
Дата 13.3.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата

я так понимаю если класс обстрактый то нужно создать реальный класс
который наследует методы от абстрактоного класса

class RealTimerTask extends TimerTask
RealTimerTask task = new RealTimerTask()


Все правильно понимаешь.
Создаешь класс наследованный от TimerTask, реализуешь его абстрактные методы.
А дальше можешь создавать этого класса объекты и "запускать" их с помощью Timer-a.
Как методы абстрактные реализуешь ( часности метод run() ), так работать и будет....


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Berliner
Дата 13.3.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Вот код что я написал. Компилит без ошибок только не работает. Подскажите пожалуста ,что я не так написал.

Код

class RTimerTask extends TimerTask {
     
RTimerTask task=new RTimerTask();
Timer timer=new Timer();

public void run(){
    
System.out.println("Работает ");
timer.schedule(task, (long) 1000, (long) 1000);
}

}


ВОт код из main

Код

public static void main(String[] args)  {
   
    RTimerTask task=new RTimerTask();
    task.run();


PM   Вверх
LSD
Дата 13.3.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



TimerTask не должен сам себя запускать, а уж тем более не должно быть вот такой строчки RTimerTask task=new RTimerTask(); этож гарантированный StackOverflowError.
Код
class RTimerTask extends TimerTask
{
  public void run()
  {
    System.out.println("Работает ");
  }
}

  public static void main(String[] args)
  {
    Timer timer = new Timer();
    RTimerTask task = new RTimerTask();
    timer.schedule(task, 1000L, 1000L);
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Berliner
Дата 13.3.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: 1
Всего: 2



Спасиб
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0882 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.