Java线程完成事件
我正在制作一个Swing应用程序,我有一个运行线程的Java线程完成事件,java,multithreading,Java,Multithreading,我正在制作一个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
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);
}
我想将该方法的最后两行移到另一个方法,该方法在线程完成时被触发。我如何才能做到这一点?您将一个任务(runnable的实现)传递给要处理的线程。线程在处理此任务时完成 您可以向任务传递回调侦听器,它将在任务完成之前发出通知 在Do login的构造函数中传递以下接口的实现
interface ICompletionListener {
void onCompletion();
}
在可运行实现中,在此对象上调用onCompletion;在这个接口的实现中,执行代码的最后两行。您的
DoLogin
Runnable
可以实现一个监听器,该监听器将在流程完成时执行
有关如何创建自己的侦听器的更多详细信息,请参阅。好吧,将您的
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();
使用一个。在doInBackground()
方法中登录,并将另外两行代码放入done()
方法中
这样做很重要,而不是简单地将要执行的附加操作添加到登录线程的末尾,或者为它们生成另一个线程,因为它们会更新您的UI,因此您希望在Swing UI线程上执行它们
SwingWorker
的done()
方法将在Swing UI线程上调用。这正是创建SwingWorker
的目的。我是否扩展我的DoLogin类?还是我的JFrame课程?