Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / треды в Swing / 8 сообщений из 8, страница 1 из 1
03.09.2007, 12:15:15
    #34771253
bemta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
я вот никак не пойму. везде пишут что если мы хотим модифицировать Swing компоненты то код писать надо в обработчиках чтобы все выполнялось в eventDispachThread. Но получается если я инициализирую swing объект в обычном методе, и делаю там типа setMax, setMin, setText и т.д. то это ведь никак не эта самая eventDispachThread. а если есть уже листенер который может (потенциально) изменить тот же самый тext то получается что это все не есть threadSafe в общем то. Просвятите плиз как там все это работает. Когда заканчивается init тред и когда стартует eventDispachThread.
...
Рейтинг: 0 / 0
03.09.2007, 12:27:15
    #34771288
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
Методы никак не завязаны на потоках. Поэтому попытка связать теримины "обычный метод" и evenDispatchThread выдают некоторое недопонимание в том что же такое потоки. Слушатели вызываются именно из EventDispathThread. Он для этого и существует, чтобы события отправлять на слушателей.
Сложности с потоками начинаются тогда когда в своем коде вы используете Thread.start() или, например различные таймеры. Или может ещё какую библиотеку которая опосредована создает потоки и запускает их через start().
...
Рейтинг: 0 / 0
03.09.2007, 12:44:44
    #34771357
bemta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
BlazkowiczМетоды никак не завязаны на потоках. Поэтому попытка связать теримины "обычный метод" и evenDispatchThread выдают некоторое недопонимание в том что же такое потоки. Слушатели вызываются именно из EventDispathThread. Он для этого и существует, чтобы события отправлять на слушателей.
Сложности с потоками начинаются тогда когда в своем коде вы используете Thread.start() или, например различные таймеры. Или может ещё какую библиотеку которая опосредована создает потоки и запускает их через start().

Ну вот смотрите: допустим в конструкторе JDialog я пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
 final  JButton valueButton =  new  JButton();
valueButton.addMouseListener( new  MouseAdapter() {
@Override
 public   void  mouseClicked(MouseEvent e) {
        valueButton.setText("BBB");
}
valueButton.setText("AAA");

Т.к. я зарегил листенер сначала, то чисто гипотетически возможна ситуация (не очень удачный пример но все же) что юзер кликает мышкой в момент когда начинает выполняется valueButton.setText("AAA") (т.е в момент сразу после регистрации листенера). Тогда в EventDispathThread стартует обработчик который тоже меняет текст в valueButton.
Я понимаю что все это работает но я не могу понять почему...
...
Рейтинг: 0 / 0
03.09.2007, 12:55:02
    #34771401
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
bemta
Ну вот смотрите: допустим в конструкторе JDialog я пишу:

значит Dialog ещё не создан, т.е. ещё не Visible, т.е он не обрабатывает сообщения в dispachThread и не рисуется. меняйте его свойства на здоровье
...
Рейтинг: 0 / 0
03.09.2007, 13:03:23
    #34771437
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
Multithreaded Swing Applications + сцылки в конце
...
Рейтинг: 0 / 0
03.09.2007, 13:03:44
    #34771439
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
expp bemta
Ну вот смотрите: допустим в конструкторе JDialog я пишу:

значит Dialog ещё не создан, т.е. ещё не Visible, т.е он не обрабатывает сообщения в dispachThread и не рисуется. меняйте его свойства на здоровье

действительно... спасибо всем пояснения!
...
Рейтинг: 0 / 0
03.09.2007, 13:31:05
    #34771538
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
Еще немного про потоки в Swing
...
Рейтинг: 0 / 0
03.09.2007, 13:50:01
    #34771626
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
треды в Swing
bemtaТ.к. я зарегил листенер сначала, то чисто гипотетически возможна ситуация (не очень удачный пример но все же) что юзер кликает мышкой в момент когда начинает выполняется valueButton.setText("AAA") (т.е в момент сразу после регистрации листенера). Тогда в EventDispathThread стартует обработчик который тоже меняет текст в valueButton.
Я понимаю что все это работает но я не могу понять почему...
Модель Swing по-умолчанию однопоточная. И в то время как создается JDialog (а нормально он может создаватся либо до создания eventDispathThread либо в нем самом), никакие слушатели не будут реагировать на действия пользователя. Событияпомещаются в очередь и как только поток освободится, только тогда начнут вызыватся лисенеры.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / треды в Swing / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]