Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / GUI + многопоточночность / 12 сообщений из 12, страница 1 из 1
17.07.2007, 18:06:05
    #34665204
Poligon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
Доброго времени суток...
Есть приложение которое читает данные из файла в потоке (использовал SwingWorker). Как проверить завершился ли поток, а самое важное куда именно вставить проверку (т.е. метод isDone()) чтобы не висло GUI приложение ?
...
Рейтинг: 0 / 0
17.07.2007, 18:24:25
    #34665255
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
Поток завершает работать когда завершается метод run, интерфейса Runnable
...
Рейтинг: 0 / 0
17.07.2007, 18:54:50
    #34665347
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
можно поискать в гугле по ключевым словам invokeLater и Swing
есть стандартные решения для подобных типов задач

Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
17.07.2007, 23:58:46
    #34665682
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
Dan Blackможно поискать в гугле по ключевым словам invokeLater и Swing
есть стандартные решения для подобных типов задач

SwingWorker это и есть "стандартные решения для подобных типов задач"
...
Рейтинг: 0 / 0
18.07.2007, 11:04:06
    #34666294
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
Blazkowicz Dan Blackможно поискать в гугле по ключевым словам invokeLater и Swing
есть стандартные решения для подобных типов задач

SwingWorker это и есть "стандартные решения для подобных типов задач"Спасибо, не знал :)

Тогда ИМХО автору темы не помешает почитать доки по SwingWorker'у или четче сформулировать вопрос.
...
Рейтинг: 0 / 0
19.07.2007, 11:19:16
    #34669399
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
PoligonДоброго времени суток...
Есть приложение которое читает данные из файла в потоке (использовал SwingWorker). Как проверить завершился ли поток, а самое важное куда именно вставить проверку (т.е. метод isDone()) чтобы не висло GUI приложение ?

Поток по окончанию работы может выставить флаг како-нить а из потока с гуем можно этот флаг проаерять переодически, например по таймеру или по кнопке
...
Рейтинг: 0 / 0
19.07.2007, 12:15:35
    #34669663
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
Главная особенность Свинга - то, что эта библиотека принципиально однопоточная. Т.е. к компонентам и их данным в Свинге можго обращаться только из EventDispatchThread. Но есть одна лазейка - методы класса SwingUlilities invokeLater и invokeAndWait. В качестве параметра они пинимают экземпляр класса, реализующего интерфейс Runnuble (в нем есть единственный метод public void run()). Метод invokeLater асинхронный - т.е. он "вставляет" экземпляр Runnuble в конец очереди событий (EventDispatchQueue) и сразу возвращает управление вызвавшему ему потоку. Метод invokeAndWait синхронный - он тоже запихивает Runnuble в EventDispatchQueue но не возвращает управление, пока EventDispatchThread не выполнит метод run. Т.е. оба метода позволяют выполнить код метода run в EventDispatchThread - таким образом из другого потолка можно безопасно обратиться к компонентам и данным Свинга.
...
Рейтинг: 0 / 0
19.07.2007, 12:31:24
    #34669754
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
ДуремарГлавная особенность Свинга - то, что эта библиотека принципиально однопоточная. Т.е. к компонентам и их данным в Свинге можго обращаться только из EventDispatchThread. Но есть одна лазейка - методы класса SwingUlilities invokeLater и invokeAndWait. В качестве параметра они пинимают экземпляр класса, реализующего интерфейс Runnuble (в нем есть единственный метод public void run()). Метод invokeLater асинхронный - т.е. он "вставляет" экземпляр Runnuble в конец очереди событий (EventDispatchQueue) и сразу возвращает управление вызвавшему ему потоку. Метод invokeAndWait синхронный - он тоже запихивает Runnuble в EventDispatchQueue но не возвращает управление, пока EventDispatchThread не выполнит метод run. Т.е. оба метода позволяют выполнить код метода run в EventDispatchThread - таким образом из другого потолка можно безопасно обратиться к компонентам и данным Свинга.

Тоже про SwingWorker никогда не слышал?
...
Рейтинг: 0 / 0
19.07.2007, 12:46:08
    #34669823
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
BlazkowiczТоже про SwingWorker никогда не слышал?
Слышал конечно :) Но SwingWorker не догма. И пользоваться им не так уж удобно. Лично я использую свой собственный framework, написанный задолго до того, как SwingWorker официально вошел в релиз 6й явы. Более того, переходя на 6ку я собирался отказаться от самопального framework'а в пользу SwingWorker'а, но изучив его как следует, пришел к выводу, что он совершенно не подходит для решения моих проблем. Более того - он банально неудобен в использовании. Так что пользуюсь своим framework'ом до сих пор, и доволен как бегемот - работает безотказно :)
...
Рейтинг: 0 / 0
19.07.2007, 12:49:34
    #34669848
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
ДуремарСлышал конечно :) Но SwingWorker не догма. И пользоваться им не так уж удобно. Лично я использую свой собственный framework, написанный задолго до того, как SwingWorker официально вошел в релиз 6й явы. Более того, переходя на 6ку я собирался отказаться от самопального framework'а в пользу SwingWorker'а, но изучив его как следует, пришел к выводу, что он совершенно не подходит для решения моих проблем. Более того - он банально неудобен в использовании. Так что пользуюсь своим framework'ом до сих пор, и доволен как бегемот - работает безотказно :)
Можно по подробнее? Что за проблемы? Почему не подходит?
...
Рейтинг: 0 / 0
19.07.2007, 13:13:11
    #34669957
Дуремар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
Ну например подгрузка/обновление данных с удаленного сервера в фоновом потоке. Во многих случаях мне требуется, чтобы задачи одного типа выполнялись в одном потоке - последовательно - друг за другом. А SwingWirker тупо использует пул потоков. Т.е. он не позволяет работать с очередью задач - что для меня очень важно. Вдобавок там есть едистдвенный collback метод - done() - который никак не описывает жизненный цикл задачи. Т.е. отсутствуют вызовы до старта задачи, обработка ошибки, finally методы.
...
Рейтинг: 0 / 0
19.07.2007, 14:06:33
    #34670266
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GUI + многопоточночность
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / GUI + многопоточночность / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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