Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование потоков в обработчике событий, если я верно понял проблему 
V
    Опции темы
koreyko
Дата 31.10.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 20.4.2010

Репутация: нет
Всего: нет



Здравствуйте, есть такой код:

Код

class ConnectToServer implements ActionListener { // обработчик пункта меню
        public void actionPerformed(ActionEvent e){
            if(new ServerDialog().isOkPressed == true){ // диалог настроек доступа к серверу
                ServerRoot serverRoot = new ServerRoot();
                if(serverRoot.getServer().getServerCapabilitiesFromServer() != null){ // если сервер доступен
                    SplitPane split = new SplitPane(); // создание нового child window и split pane в нем
                    split.addNewTree(serverRoot); // добавление нового JTree во вновь созданный split pane с корневым узлом   
                    serverRoot.getServer().getDataFromServer(); // получение данных с сервера
            };
        }        
    }


Описание привел в комментариях. Т.е. задача - получить доступ к серверу, если доступ есть, то должна выполниться такая последовательность:
- создать новое JInternalFrame, туда вставить JSplitPanel, в который в свою очередь вставить JTree с уже созданным рутовым узлом и отобразить все это;
- получить данные с сервера, довольно затратная процедура по времени;
- на основе полученных данных достроить существующее дерево и отобразить его.

Что получается в действительности:
- вначале происходит получение данных с сервера, и только после этого отображается вновь созданный JInternalFrame с содержимым.  

Я так понимаю, здесь возникают проблемы с потоками и очередями событий. К сожалению, я слаб в этом, на практике никогда не пользовался. Читал только, что для действий над swing-объектами необходимо использовать SwingUtilities.invokeLater(), для длительных процессов - класс SwingWorkeк. Возможно еще есть нюансы, связанные с расположением всего этого в лисенере. 

Подскажите, в каких именно потоках правильно вышеуказанный код.
Спасибо. 
PM MAIL   Вверх
Kangaroo
Дата 1.11.2011, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Сейчас все выполняется в одном потоке. Лучше перенести "получение данных с сервера" в другой поток.

1. В actionPerformed создаем и показываем JInternalFrame с заглушкой "Загрузка данных..."
2. Запускаем SwingWorker, который загружает данные. Пример использования:
http://java.sun.com/developer/technicalArt...se/swingworker/
3. В методе "done" SwingWorker'a выводим полученные данные на форму. 


--------------------
Lost....
PM MAIL MSN   Вверх
koreyko
Дата 1.11.2011, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 20.4.2010

Репутация: нет
Всего: нет



Цитата(Kangaroo @ 1.11.2011,  08:40)
Сейчас все выполняется в одном потоке. Лучше перенести "получение данных с сервера" в другой поток.

1. В actionPerformed создаем и показываем JInternalFrame с заглушкой "Загрузка данных..."
2. Запускаем SwingWorker, который загружает данные. Пример использования:
http://java.sun.com/developer/technicalArt...se/swingworker/
3. В методе "done" SwingWorker'a выводим полученные данные на форму.

Спасибо, получилось.

Правда пришлось обернуть создание JInternalFrame в SwingUtilities.invokeLater(), иначе вновь созданный JInternalFrame отображался уже после завершения работы SwingWorker.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1262 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.