![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
zone51 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Товарищи, доброго времени суток всем! Помогите пожалуйста разобраться с проблемой. Есть GUI форма и на ней 2 кнопки- одна запускает поток, в потоке крутится таймер. Другой кнопкой поток стоппится. Использую java.util.timer. То есть в одном методе ActionListener что то вроде
В другом
Проблема в том что запускается то хорошо, но никак нельзя остановить. К тому же поток крутится но из других методов класса в том числе из второго листенера этот поток не виден. то есть он всегда TERMINATED. Помогите разобрацца. Почитал доку вроде таймер свой поток запускает. Пытался сделать чисто таймером. То же самое. Таймер не стопится. В чем дело? Спасибо. ![]() ![]() -------------------- The truth is out there |
||||
|
|||||
Hidrag |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 3 Всего: 25 |
Если тебе нужно выполнять что то в другом потоке и при этом управлять им то можно сделать так:
Создай класс, наследуй его от потока, определи в нем метод run:
То есть гоняешь цикл пока переменная не истина... В классе из которого будешь запускать, можно сделать что то типа жтого:
или так:
-------------------- ![]() |
||||||
|
|||||||
zone51 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Hidrag,
Я как делаю:
А в GUI
так вот во второй процедуре для button2 никак не видится cl. Он всегда (поток) остановлен. То что вы предлагаете я конечно попробую, но неужели нельзя сделать все стандартно? Кстати
В моем случае проблема не в этом, я думаю что r.stop=true не будет видна точно как и newcl.interrupt() Спасибо. -------------------- The truth is out there |
||||||||
|
|||||||||
Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 3 Всего: 25 |
В классе потока обьяви пабликом таймер, опиши те действия которые таймер крутит в конструкторе класса, а в run стартуй таймер. Таким образом поток всегда будет работать.
Поскольку таймер будет пабликом ты можешь из другого класса вызвать его метод stop для остановки. И наверное не стоит создавать экземпляр потока по нажатию кнопки вынеси создание в конструктор а по нажатию первой кнопки запуская старт у таймера а по нажатию второй кнопки стоп таймера. А зачем public static cl newcl; статиком сделал? -------------------- ![]() |
|||
|
||||
zone51 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 17.2.2006 Репутация: нет Всего: 1 |
Hidrag,
На всякий Выносить отдельной кнопкой создание в конструкторе нельзя-требования к интерфейсу. К тому же в java.util.Timer есть только cancel() и он не работает из другой процедуры. Не пойму в чем дело. -------------------- The truth is out there |
|||
|
||||
Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 3 Всего: 25 |
Что что? ![]() Еще раз: зачем создавать экземпляр класса потока по нажатию кнопки? Если ты каждый раз будешь нажимать эту кнопку у тебя будут плодиться инстансы и как ты будешь отслеживать какой из них тормозить? По нажатию стартуй или останавливай таймер в экземпляре класса потока. У таймера есть воиды старт и стоп, по крайней мере в 1.5. ...и убери статик ..счас пример накидаю... Это сообщение отредактировал(а) Hidrag - 13.2.2007, 11:54 -------------------- ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Почитай FAQ по многопоточному программированию.
-------------------- 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. |
|||
|
||||
Hidrag |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 3 Всего: 25 |
Да ты был прав насчет него! Но ведь есть более удобный таймер в свинге! Вот пример: Класс с кнопками:
Класс потока:
Это сообщение отредактировал(а) Hidrag - 13.2.2007, 12:40 -------------------- ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |