2012-02-20 9 views
0

私はXMPPサーバーに接続しています。私のフォームでは、現在の操作状態、つまり「XMPPサーバーへの接続」、「認証の受け渡し」などについてユーザーに知らせたいと思います。最後の状態を示します。これは「正常に接続されました」です。java swingでjLabelを更新するにはどうすればよいですか?

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."); 

} 

ラベルを更新するにはどうすればいいですか?

+0

* *あなたのスイングアプリケーションには、このスニペットコードがありますか?イベントハンドラ内にある場合、最初の2つは表示されません。これは、スレッド内にあり、再描画イベントの処理も担当しているからです。 @BrianRoach。 –

+0

これはjButtonのクリックイベントの下にあります。上記のコードブロックを更新しました。 – Bakhtiyor

答えて

0

SwingWorkerを使用して別のスレッド(EDTではなく)でログインを実行し、SwingUtilities.invokeLaterを使用してEDTのステータスバーを更新することができます。あなたの実装は次のようになります:

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

は抽象メソッドではなく、invokeLaterを使用して迂回する場合は、抽象メソッドdoInBackground()をjavax.swing.SwingWorker – Bakhtiyor

+0

-1にオーバーライドしません。中間結果を処理するための意図された方法は、doInBackgroundで公開を呼び出して実際の設定を行うプロセスを実装することです(これはEDT上にあることが保証されています) – kleopatra

関連する問題