2

私は Swing アプリケーションを作成していRunnableます。スレッドを実行するクラスがあり、スレッドは HTTP 要求を作成します。スレッドがいつ終了したかを知る最善の方法は何ですか?

private void loginMouseClicked(java.awt.event.MouseEvent evt) {
    login.setEnabled(false);
    loading.setVisible(true);

    DoLogin log = new DoLogin(user.getText(), pass.getPassword().toString());
    Thread t = new Thread(log);
    t.start();

    loading.setVisible(false);
    login.setEnabled(true);
}

そのメソッドの最後の 2 行を、スレッドの完了時に起動される別のメソッドに移動したいと思います。これどうやってするの?

4

4 に答える 4

2

SwingWorkerを使用します。メソッドにログインし、doInBackground()他の2行のコードをdone()メソッドに配置します。

ログインスレッドの最後に実行する追加のアクションを追加したり、さらに別のスレッドを生成したりするのではなく、この方法で行うことが重要です。これらのアクションはUIを更新するため、SwingUIで実行する必要があるためです。スレッド。SwingWorkerdone()メソッドはSwingUIスレッドで呼び出されます。

于 2013-01-18T19:12:46.160 に答える
0

DoLoginさて、そのような方法であなたを新しいものに包みますRunnable

Runnable r = new Runnable() {
    public void run() {
          DoLogin log = new DoLogin(user.getText(), pass.getPassword().toString());
          log.run();

          // placing here finishing stuff
          loading.setVisible(false);
          login.setEnabled(true);
    }
}
Thread t = new Thread(r);
t.start();
于 2013-01-18T19:12:09.830 に答える
0

DoLogin Runnableプロセスが完了したときに実行されるリスナーを実装できます。

独自のリスナーを作成する方法の詳細については、この回答を参照してください。

于 2013-01-18T19:11:01.440 に答える
0

タスクを渡します - runnable の実装を処理するスレッドに渡します。このタスクを処理すると、スレッドは完了します。

タスクが完了する直前に通知するコールバック リスナーをタスクに渡すことができます。

Do login のコンストラクターで、以下のインターフェースの実装を渡します。

interface ICompletionListener {
void onCompletion();
}

実行可能な実装では、このオブジェクトで onCompletion を呼び出します。このインターフェイスの実装では、コードの最後の 2 行を実行します。

于 2013-01-18T19:09:48.520 に答える