で、簡単かつ安全なの一つは、SwingWorker
使用詳細
public class LoginWorker extends SwingWorker<Boolean, Void> {
private String userName;
private char[] password;
public LoginWorker(String userName, char[] password) {
this.userName = userName;
this.password = password;
}
@Override
protected Boolean doInBackground() throws Exception {
// Here is where you do the actualy login process...
// You'll notice I passed the login/password to the constructor
Thread.sleep(1000);
return true;
}
}
ため
Worker Threads and SwingWorkerを参照してくださいを利用することですそれは...
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
btnLogin.setEnabled(false);
LoginWorker worker = new LoginWorker("username", new char[]{'p', 'a', 's', 's', 'w', 'o', 'r', 'd'});
worker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
SwingWorker<Boolean, Void> worker = (SwingWorker<Boolean, Void>) evt.getSource();
if ("state".equals(evt.getPropertyName())) {
SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();
switch (state) {
case DONE: {
btnLogin.setEnabled(true);
try {
boolean result = worker.get();
if (result) {
JOptionPane.showMessageDialog(TestPane.this, "Login was successful");
} else {
JOptionPane.showMessageDialog(TestPane.this, "Login was unsuccessful");
}
} catch (InterruptedException | ExecutionException ex) {
ex.printStackTrace();
}
}
break;
}
}
}
});
worker.execute();
}
});
私はそれがプロセスを切り離すように、この場合にはPropertyChangeListener
を利用することを選択したが、あなたは電子ことができXTEND LoginWorker
と、それは代わりにdone
方法だオーバーライドするが、その後、あなたは
はあなたがバックグラウンドでにログインを実行し、いずれかのPropertyChangeListenerを使用するか、上書きすることが可能になるSwingWorkerのを、使用することを検討してくださいとにかくオブザーバーパターンのいくつかの種類を必要とするだろうメッセージを表示する完了メソッド – MadProgrammer