|
|
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
я вот никак не пойму. везде пишут что если мы хотим модифицировать Swing компоненты то код писать надо в обработчиках чтобы все выполнялось в eventDispachThread. Но получается если я инициализирую swing объект в обычном методе, и делаю там типа setMax, setMin, setText и т.д. то это ведь никак не эта самая eventDispachThread. а если есть уже листенер который может (потенциально) изменить тот же самый тext то получается что это все не есть threadSafe в общем то. Просвятите плиз как там все это работает. Когда заканчивается init тред и когда стартует eventDispachThread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 12:15:15 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
Методы никак не завязаны на потоках. Поэтому попытка связать теримины "обычный метод" и evenDispatchThread выдают некоторое недопонимание в том что же такое потоки. Слушатели вызываются именно из EventDispathThread. Он для этого и существует, чтобы события отправлять на слушателей. Сложности с потоками начинаются тогда когда в своем коде вы используете Thread.start() или, например различные таймеры. Или может ещё какую библиотеку которая опосредована создает потоки и запускает их через start(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 12:27:15 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМетоды никак не завязаны на потоках. Поэтому попытка связать теримины "обычный метод" и evenDispatchThread выдают некоторое недопонимание в том что же такое потоки. Слушатели вызываются именно из EventDispathThread. Он для этого и существует, чтобы события отправлять на слушателей. Сложности с потоками начинаются тогда когда в своем коде вы используете Thread.start() или, например различные таймеры. Или может ещё какую библиотеку которая опосредована создает потоки и запускает их через start(). Ну вот смотрите: допустим в конструкторе JDialog я пишу: Код: plaintext 1. 2. 3. 4. 5. 6. Т.к. я зарегил листенер сначала, то чисто гипотетически возможна ситуация (не очень удачный пример но все же) что юзер кликает мышкой в момент когда начинает выполняется valueButton.setText("AAA") (т.е в момент сразу после регистрации листенера). Тогда в EventDispathThread стартует обработчик который тоже меняет текст в valueButton. Я понимаю что все это работает но я не могу понять почему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 12:44:44 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
bemta Ну вот смотрите: допустим в конструкторе JDialog я пишу: значит Dialog ещё не создан, т.е. ещё не Visible, т.е он не обрабатывает сообщения в dispachThread и не рисуется. меняйте его свойства на здоровье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 12:55:02 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
Multithreaded Swing Applications + сцылки в конце ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:03:23 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
expp bemta Ну вот смотрите: допустим в конструкторе JDialog я пишу: значит Dialog ещё не создан, т.е. ещё не Visible, т.е он не обрабатывает сообщения в dispachThread и не рисуется. меняйте его свойства на здоровье действительно... спасибо всем пояснения! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:03:44 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
Еще немного про потоки в Swing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:31:05 |
|
||
|
треды в Swing
|
|||
|---|---|---|---|
|
#18+
bemtaТ.к. я зарегил листенер сначала, то чисто гипотетически возможна ситуация (не очень удачный пример но все же) что юзер кликает мышкой в момент когда начинает выполняется valueButton.setText("AAA") (т.е в момент сразу после регистрации листенера). Тогда в EventDispathThread стартует обработчик который тоже меняет текст в valueButton. Я понимаю что все это работает но я не могу понять почему... Модель Swing по-умолчанию однопоточная. И в то время как создается JDialog (а нормально он может создаватся либо до создания eventDispathThread либо в нем самом), никакие слушатели не будут реагировать на действия пользователя. Событияпомещаются в очередь и как только поток освободится, только тогда начнут вызыватся лисенеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:50:01 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34771253&tid=2144737]: |
0ms |
get settings: |
18ms |
get forum list: |
30ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
61ms |
get topic data: |
22ms |
get forum data: |
6ms |
get page messages: |
102ms |
get tp. blocked users: |
3ms |
| others: | 303ms |
| total: | 559ms |

| 0 / 0 |
