Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Timer `n` Thread |
Автор: zone51 12.2.2007, 23:48 | ||||
Товарищи, доброго времени суток всем! Помогите пожалуйста разобраться с проблемой. Есть GUI форма и на ней 2 кнопки- одна запускает поток, в потоке крутится таймер. Другой кнопкой поток стоппится. Использую java.util.timer. То есть в одном методе ActionListener что то вроде
В другом
Проблема в том что запускается то хорошо, но никак нельзя остановить. К тому же поток крутится но из других методов класса в том числе из второго листенера этот поток не виден. то есть он всегда TERMINATED. Помогите разобрацца. Почитал доку вроде таймер свой поток запускает. Пытался сделать чисто таймером. То же самое. Таймер не стопится. В чем дело? Спасибо. ![]() ![]() |
Автор: Hidrag 13.2.2007, 00:13 | ||||||
Если тебе нужно выполнять что то в другом потоке и при этом управлять им то можно сделать так: Создай класс, наследуй его от потока, определи в нем метод run:
То есть гоняешь цикл пока переменная не истина... В классе из которого будешь запускать, можно сделать что то типа жтого:
или так:
|
Автор: zone51 13.2.2007, 01:17 | ||||||||
Hidrag, Я как делаю:
А в GUI
так вот во второй процедуре для button2 никак не видится cl. Он всегда (поток) остановлен. То что вы предлагаете я конечно попробую, но неужели нельзя сделать все стандартно? Кстати
В моем случае проблема не в этом, я думаю что r.stop=true не будет видна точно как и newcl.interrupt() Спасибо. |
Автор: Hidrag 13.2.2007, 09:51 |
В классе потока обьяви пабликом таймер, опиши те действия которые таймер крутит в конструкторе класса, а в run стартуй таймер. Таким образом поток всегда будет работать. Поскольку таймер будет пабликом ты можешь из другого класса вызвать его метод stop для остановки. И наверное не стоит создавать экземпляр потока по нажатию кнопки вынеси создание в конструктор а по нажатию первой кнопки запуская старт у таймера а по нажатию второй кнопки стоп таймера. А зачем public static cl newcl; статиком сделал? |
Автор: zone51 13.2.2007, 11:27 | ||
Hidrag,
На всякий Выносить отдельной кнопкой создание в конструкторе нельзя-требования к интерфейсу. К тому же в java.util.Timer есть только cancel() и он не работает из другой процедуры. Не пойму в чем дело. |
Автор: Hidrag 13.2.2007, 11:51 |
Что что? ![]() Еще раз: зачем создавать экземпляр класса потока по нажатию кнопки? Если ты каждый раз будешь нажимать эту кнопку у тебя будут плодиться инстансы и как ты будешь отслеживать какой из них тормозить? По нажатию стартуй или останавливай таймер в экземпляре класса потока. У таймера есть воиды старт и стоп, по крайней мере в 1.5. ...и убери статик ..счас пример накидаю... |
Автор: LSD 13.2.2007, 12:08 |
Почитай FAQ по многопоточному программированию. |
Автор: Hidrag 13.2.2007, 12:18 | ||||
Да ты был прав насчет него! Но ведь есть более удобный таймер в свинге! Вот пример: Класс с кнопками:
Класс потока:
|