2012-02-20 2 views
0

Я подключаюсь к XMPP-серверу, и в своей форме я хотел бы сообщить пользователю о текущем состоянии операции, то есть «Подключение к серверу XMPP», «Передача аутентификации» и т. Д. У меня есть следующий код в java, но он только показывает последнее состояние, которое «успешно подключено».Как обновить jLabel в java swing?

private void jLoginActionPerformed(java.awt.event.ActionEvent evt) { 
     Connection connection=new XMPPConnection("example.com"); 
     jStatusBar.setText("Connecting to XMPP Server ..."); 
     connection.connect(); 
     jStatusBar.setText("Passing authentication ..."); 
     connection.login(username, password); 
     jStatusBar.setText("Successfully connected."); 

} 

Как сделать java для обновления ярлыков?

+0

* Где * находится этот фрагмент кода, находящийся в вашем приложении качания? Если он находится в обработчике событий, первые два никогда не будут отображаться, потому что вы находитесь в потоке, который также отвечает за обработку событий перерисовки. –

+0

@BrianRoach. Он находится под событием click jButton. Я обновил блок кода выше. – Bakhtiyor

ответ

0

Вы можете выполнить вход в другой поток (не в EDT) с помощью SwingWorker и обновить свою строку состояния в EDT (используя SwingUtilities.invokeLater). Ваша реализация будет выглядеть примерно так:

SwingWorker<Void, Void> loginTask = new SwingWorker<Void, Void>(){ 

     protected void doInBackground(){ 
      Connection connection=new XMPPConnection("example.com"); 
      message("Connecting to XMPP Server"); 
      connection.connect(); 
      message("Passing authentication ..."); 
      connection.login(username, password); 
      message("Successfully connected."); 
     } 

     private void message(final String text){ 
      SwingUtilities.invokeLater(new Runnable(){ 
       jStatusBar.setText(text); 
      }); 
     } 
    } 

loginTask.execute(); 
+0

<анонимный gap.LoginForm $ 5> не является абстрактным и не переопределяет абстрактный метод doInBackground() в javax.swing.SwingWorker – Bakhtiyor

+0

-1 для объезда с invokeLater. Предполагаемый способ обработки промежуточных результатов состоит в том, чтобы вызвать публикацию в doInBackground и реализовать процесс для фактической настройки (это гарантировано на EDT) – kleopatra

Смежные вопросы