当前位置: 首页 > 面试题库 >

使用SwingWorker在后台执行复杂的任务

陶胤
2023-03-14
问题内容

我有登录屏幕的GUI。每当我按下登录按钮时,都会对照在线mysql数据库中的输入检查用户名和密码,我正在通过登录按钮的actionPerformed()方法从数据库中提取所有这些信息。问题是程序正在从数据库中获取数据时,
GUI冻结。我搜索了我的问题,发现我应该使用SwingWorker,但是作为一个新手,我没有获得如何使用SwingWorker的目的。


问题答案:

首先,在您的类中声明一个成员变量(它可能在您的GUI类中),其类型SwingWorker如下:

private SwingWorker<Boolean, Void> backgroundProcess;

然后像这样在初始化代码(构造函数,onShow方法事件处理程序等)中初始化变量:

    backgroundProcess = new SwingWorker<Boolean, Void>() {

        @Override
        protected Boolean doInBackground() throws Exception {
            // paste the MySQL code stuff here
        }

        @Override
        protected void done() {
            // Process ended, mark some ended flag here
            // or show result dialog, messageBox, etc      
        }
    };

然后,在您的actionPerfomed方法中,调用SwingWorker的execute方法:

    backgroundProcess.execute();

如果操作正确,则在按钮按下事件后,GUI不应冻结



 类似资料:
  • 本文向大家介绍把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?相关面试题,主要包含被问及把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?时的应答技巧和注意事项,需要的朋友参考一下 答案: 把后台任务调到前台执行 fg 把停下的后台任务在后台执行起来 bg

  • 问题内容: 我正在为我的学校创建一个应用程序,该应用程序应每n分钟检查一次网站上是否有新标记。为此,当用户首次登录时,实际标记的编号将保存在“ UserDefaults”中。当应用终止时,n分钟后,将重新计算标记的数量,并将其与前一个标记进行比较,并在更改数量时发送通知。 我想知道是否有一种方法可以执行此任务。我尝试在-applicationWillTerminate-中创建一个计时器,但只触发了

  • 问题内容: 我正在尝试在我的应用程序中实现一个类。有没有办法设置时间长度,之后SwingWorker会“超时”?我当时在想,也许会抛出一个异常,我可以捕捉然后处理。我只是不确定如何实现它。 感谢你的帮助! 问题答案: 为什么不将您的任务嵌入到Runnable中,将其放入新的单线程ExecutorService中,然后在适当的超时时间内对生成的Future执行。这将为您提供超时功能,因为如果作业未及

  • 问题内容: 我需要执行一个shell脚本。难得的是我想这样做 我不希望它等待命令完成,我希望它在后台进程中运行。我不想要另一个php线程,因为它将超时,该命令最多可能需要3个小时才能完成。 问题答案: 您需要重定向命令的输出。 如果使用此功能启动程序,则要使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。否则,PHP会挂起,直到程序执行结束。 http://php.net/manual

  • 是retfit方法已经是后台任务,还是应该在中调用此方法。在retfit官方文档中提到了在mainThread中执行的回调,但不清楚execute方法是否是后台任务。 改装文档:

  • 我是RxJava的新手。我有一个,用于下载图像URL列表并将其转换为位图的简单网络操作。 在活动的上,我取消订阅可观察到的以避免内存泄漏。 我能看到的是,如果我在图像下载过程中退出活动,后台任务也会被终止。我只想继续做背景工作,即使我已经取消了《观察家》的订阅。有可能吗?