Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: GUI и Java FX приложения > Оптимизация потока |
Автор: x3bytes 10.11.2006, 22:24 | ||||||
Здесь создаётся поток. Тоесть при нажатии на JPanel у окна которое содержит этот JPanel начинает крутится счётчик в заголовке окна. Грубо говоря пример эммуляции зажатия кнопки мыши на объекте(ведь в этом JPanel может быть рисованая кнопка) Мой вопрос про оптимизацию потока. Вроде всё работает, но если подумать то когда мы не нажимаем на JPanel наш поток надо приостанавливать(зачем зря будет работать). Потом запуск реализуется коммандой start() и постоянно вызывается при нажатии мышки. Правильно ли это? Как я знаю надо только 1 раз вызывать start() при запуске потока. Я пытался разобраться с wait() yield() и suspend() но чтот безрезультатно. Может ктот приведёт код правильного использования этих комманд? Можно ли реализовать поток независимо от этого класса Runnable типа:
так как если заменить этим кодом строчку
то при повторном нажатии на JPanel выскочит ошибка at java.lang.Thread.start(Thread.java:571) |
Автор: x3bytes 11.11.2006, 18:10 | ||
Спасибо огромное тебе LSD !!! ![]() Столько перерыл справок и не смог по ним сделать работующую прогу. А по твоим словам сразу получилось. Привожу пример изменёной программы. Теперь я так понимаю всё сделано как надо и процесс пока он не нужен не обрабатывается процессором.
правда не совсем понял практическое применение invokeLater() |
Автор: powerOn 11.11.2006, 18:16 |
http://forum.vingrad.ru/topic-50027.html |
Автор: LSD 11.11.2006, 18:20 |
invokeLater() нужен для того чтобы выполнять действия в потоке обработки сообщений AWT. Если мы будем одновременно из разных потоков менять данные, то может нарушится их целостность. Выхода два: синхронизировать доступ к данным, или делать все из одного потока. Синхронизация плоха тем, что замедляет скорость работы (синхронизированный вызов функции ощутимо дольше, не синхронизированного), поэтому для Swing был выбран второй метод (такой же подход выбран и для SWT, и для WindowsForms), а invokeLater() это просто способ его реализации. |
Автор: x3bytes 13.11.2006, 04:25 |
А можно пример с оптимизацией на основе кода(приведеного выше) с использованием этой функции? У меня всю дорогу только получается завесить приложение этой функцией. |
Автор: LSD 13.11.2006, 09:29 |
Я тебе уже дал пример как надо его использовать. Ты его пробовал? |
Автор: x3bytes 13.11.2006, 20:14 |
Да спасибо! Спасибо за помощь ![]() |