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

start [/forum/topic.php?fid=59&mobile=1&tid=2145119]: |
0ms |
get settings: |
17ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 355ms |
| total: | 516ms |

| 0 / 0 |
