powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Splash или что-то около него :)
5 сообщений из 5, страница 1 из 1
Splash или что-то около него :)
    #32869098
Sergey Putra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть в следующем. Есть у меня клиент-серверное приложение. IDE на стороне клиента часто выполняет операции длительные по времени (5-20 сек). Вот решил повесить какое либо окошко с надписью "Ожидайте" или что-то вроде того.
Для этого я создал JWindow и запихал в него JLabel. Теперь про отображение этого JWindow:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
   public   void  showJWindow() {
    jWindow.show();
  }

   public   void  hideJWindow() {
    jWindow.setVisible(false);
  }

   public   void  myFunc() {
    ....
    showJWindow();
    ....
    hideJWindow();
    ....
  }

При этом само окно отображается, но JLabel в нём не прорисовывается. Просто серое окошко и всё. Немного помозговав и порыскав по докам сделал следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
   public   void  myFunc() {
    ....
    SwingUtilities.invokeLater( new  Runnable() {
       public   void  run() {
        showJWindow();
      }
    });
    ....[мой код]...
    SwingUtilities.invokeLater( new  Runnable() {
       public   void  run() {
        hideJWindow();
      }
    });
    ....
  }
После этого окно стало появляться и тут же умирать уже после того как исполнится кусок [мой код].

Добрые пиплы подскажите где я туплю. Или может есть какой путь попросче, а я мудрю по чём зря. Если не жалко, то с примерами кода. Задачка я так понимаю часто встречающееся и интересно кто как её решает.
...
Рейтинг: 0 / 0
Splash или что-то около него :)
    #32869689
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя из потоков элементами swing'а управлять, нужно таймер исползовать......
...
Рейтинг: 0 / 0
Splash или что-то около него :)
    #32869799
Sergey Putra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то последний пример я подсмотрел в SwingSet2, который идёт в демках к JDK. Там-то работает :)
...
Рейтинг: 0 / 0
Splash или что-то около него :)
    #32870789
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Putra
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
   public   void  myFunc() {
    ....
    SwingUtilities.invokeLater( new  Runnable() {
       public   void  run() {
        showJWindow();
      }
    });
    ....[мой код]...
    SwingUtilities.invokeLater( new  Runnable() {
       public   void  run() {
        hideJWindow();
      }
    });
    ....
  }
После этого окно стало появляться и тут же умирать уже после того как исполнится кусок [мой код].

Добрые пиплы подскажите где я туплю.

invokeLater() делает invoke, но Later %)
Если твой код исполняется лишком быстро, то будет иметь место описанное тобой.
Use invokeAndWait().
Но при этом нужно помнить о "This will happen after all pending AWT events have been processed."
Поэтому, если метод myFunc() вызывается из event dispatcher thread, то получится ерунда.
В этом случае, нужно "твой код" вызывать в отдельном thread'e.
Так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 void  myfunc(){
  showJWindow();
   new  Thread() {
       void  run() {  
          ...твой код...
          SwingUtilites.invokeLater(
              new  Runnable(){
                   void  run(){
                      closeJWindow();
                  }
             });
     }
  }.start();
}
Либо использовать thread выполняющий твой таск и swing-таймер, который за этим таском следит и открывает/закрывает окно с прогрес баром или просто мессаджем.

Первый вариант не работал, потому что window#show() сам постит awt event и что бы его обработать (и прорисовка окна была завершена), должна закончиться обработка текущего эвента.
...
Рейтинг: 0 / 0
Splash или что-то около него :)
    #32871318
Sergey Putra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за толковое объяснение. Буду пробовать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Splash или что-то около него :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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