|
|
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток... Есть приложение которое читает данные из файла в потоке (использовал SwingWorker). Как проверить завершился ли поток, а самое важное куда именно вставить проверку (т.е. метод isDone()) чтобы не висло GUI приложение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 18:06:05 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
Поток завершает работать когда завершается метод run, интерфейса Runnable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 18:24:25 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
можно поискать в гугле по ключевым словам invokeLater и Swing есть стандартные решения для подобных типов задач Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 18:54:50 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
Dan Blackможно поискать в гугле по ключевым словам invokeLater и Swing есть стандартные решения для подобных типов задач SwingWorker это и есть "стандартные решения для подобных типов задач" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2007, 23:58:46 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Dan Blackможно поискать в гугле по ключевым словам invokeLater и Swing есть стандартные решения для подобных типов задач SwingWorker это и есть "стандартные решения для подобных типов задач"Спасибо, не знал :) Тогда ИМХО автору темы не помешает почитать доки по SwingWorker'у или четче сформулировать вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 11:04:06 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
PoligonДоброго времени суток... Есть приложение которое читает данные из файла в потоке (использовал SwingWorker). Как проверить завершился ли поток, а самое важное куда именно вставить проверку (т.е. метод isDone()) чтобы не висло GUI приложение ? Поток по окончанию работы может выставить флаг како-нить а из потока с гуем можно этот флаг проаерять переодически, например по таймеру или по кнопке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 11:19:16 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
Главная особенность Свинга - то, что эта библиотека принципиально однопоточная. Т.е. к компонентам и их данным в Свинге можго обращаться только из EventDispatchThread. Но есть одна лазейка - методы класса SwingUlilities invokeLater и invokeAndWait. В качестве параметра они пинимают экземпляр класса, реализующего интерфейс Runnuble (в нем есть единственный метод public void run()). Метод invokeLater асинхронный - т.е. он "вставляет" экземпляр Runnuble в конец очереди событий (EventDispatchQueue) и сразу возвращает управление вызвавшему ему потоку. Метод invokeAndWait синхронный - он тоже запихивает Runnuble в EventDispatchQueue но не возвращает управление, пока EventDispatchThread не выполнит метод run. Т.е. оба метода позволяют выполнить код метода run в EventDispatchThread - таким образом из другого потолка можно безопасно обратиться к компонентам и данным Свинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 12:15:35 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
ДуремарГлавная особенность Свинга - то, что эта библиотека принципиально однопоточная. Т.е. к компонентам и их данным в Свинге можго обращаться только из EventDispatchThread. Но есть одна лазейка - методы класса SwingUlilities invokeLater и invokeAndWait. В качестве параметра они пинимают экземпляр класса, реализующего интерфейс Runnuble (в нем есть единственный метод public void run()). Метод invokeLater асинхронный - т.е. он "вставляет" экземпляр Runnuble в конец очереди событий (EventDispatchQueue) и сразу возвращает управление вызвавшему ему потоку. Метод invokeAndWait синхронный - он тоже запихивает Runnuble в EventDispatchQueue но не возвращает управление, пока EventDispatchThread не выполнит метод run. Т.е. оба метода позволяют выполнить код метода run в EventDispatchThread - таким образом из другого потолка можно безопасно обратиться к компонентам и данным Свинга. Тоже про SwingWorker никогда не слышал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 12:31:24 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТоже про SwingWorker никогда не слышал? Слышал конечно :) Но SwingWorker не догма. И пользоваться им не так уж удобно. Лично я использую свой собственный framework, написанный задолго до того, как SwingWorker официально вошел в релиз 6й явы. Более того, переходя на 6ку я собирался отказаться от самопального framework'а в пользу SwingWorker'а, но изучив его как следует, пришел к выводу, что он совершенно не подходит для решения моих проблем. Более того - он банально неудобен в использовании. Так что пользуюсь своим framework'ом до сих пор, и доволен как бегемот - работает безотказно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 12:46:08 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
ДуремарСлышал конечно :) Но SwingWorker не догма. И пользоваться им не так уж удобно. Лично я использую свой собственный framework, написанный задолго до того, как SwingWorker официально вошел в релиз 6й явы. Более того, переходя на 6ку я собирался отказаться от самопального framework'а в пользу SwingWorker'а, но изучив его как следует, пришел к выводу, что он совершенно не подходит для решения моих проблем. Более того - он банально неудобен в использовании. Так что пользуюсь своим framework'ом до сих пор, и доволен как бегемот - работает безотказно :) Можно по подробнее? Что за проблемы? Почему не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 12:49:34 |
|
||
|
GUI + многопоточночность
|
|||
|---|---|---|---|
|
#18+
Ну например подгрузка/обновление данных с удаленного сервера в фоновом потоке. Во многих случаях мне требуется, чтобы задачи одного типа выполнялись в одном потоке - последовательно - друг за другом. А SwingWirker тупо использует пул потоков. Т.е. он не позволяет работать с очередью задач - что для меня очень важно. Вдобавок там есть едистдвенный collback метод - done() - который никак не описывает жизненный цикл задачи. Т.е. отсутствуют вызовы до старта задачи, обработка ошибки, finally методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2007, 13:13:11 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34666294&tid=2145119]: |
0ms |
get settings: |
17ms |
get forum list: |
28ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
52ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
93ms |
get tp. blocked users: |
3ms |
| others: | 393ms |
| total: | 623ms |

| 0 / 0 |
