java - 登录 SwingWorker

标签 java swing swingworker

我有一个扩展 SwingWorker<Void, Void> 的类。在它的后台线程中,如果成功更改布局并向框架添加新面板,我应该登录。因此 Swing Worker 执行以下 3 项任务:

  1. 登录
  2. 更改布局
  3. 添加/删除面板。

所以我在 doInBackground() 方法中编写了这个函数。但是这里发生的情况是,无论登录成功与否,这3个方法总是被执行。如果登录失败,我想停止执行工作程序。我尝试了 cancel() 方法,但没有成功。我怎样才能以正确的方式做到这一点? 在 SwingWorker 中执行登录任务的正确方法是什么?

最佳答案

第二步和第三步不得在 doInBackground() 中完成方法,因为它们使用 Swing 组件,因此必须在事件调度线程中完成。它们必须在 done() 中完成方法,如果登录成功。

所以你的 SwingWorker 应该是 SwingWorker<Boolean, Void>doInBackground()如果登录成功,该方法应返回 true,否则返回 false:

SwingWorker<Boolean, Void> loginWorker = new SwingWorker<Boolean, Void>() {
    protected Boolean doInBackground() {
        return login();
    }

    protected void done() {
        try {
            boolean loginSuccessful = get();
            if (loginSuccessful) {
                updateGUI();
            }
        }
        catch (Exception e) {
            displayErrorMessage(e);
        }
    }
};

关于java - 登录 SwingWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11735903/

相关文章:

Java 重写私有(private)函数不显示多态行为

java - Android Sqlite 仅更新第一行

java - SWING JTable : How do I make each row as high as it's tallest object?

Java swing、SwingWorker、进程栏不会更新

java - Swing GUI 不更新

java - 如何以编程方式清除日志文件?

java - 如何按顺序显示解密和拆分的字符串?

Java - 如何对多个 JTextFields 使用单个 FocusListener?

Java GUI - 多个页面或选项卡

java - Progress Bar - 是否可以在 doInBackground() 方法之外使用 Progress Bar 的 setProgess()?