我正在阅读多个帖子,但找不到清晰的答案。

我有一个应用程序(主机),它具有一个开始和一个停止按钮以及一个jTextArea。当用户按下“开始”按钮时,将实例化SwingWorker类并运行(execute())任务。该任务是连接到数据库并进行一些检查。对于每次检查,它都会正确更新jTextArea,一切都很好。当按下停止按钮时,我将isCancelled()设置为true,因此后台进程停止(我在SwingWorker内部进行了适当的检查以停止执行等)。

我想要做的是当用户按下“开始”时,SwingWorker开始执行, sleep 几分钟,然后重新运行相同的任务。当按下“停止”按钮时,一切停止。

我该如何实现?我知道SwingWorker后台进程应该运行一次。这样做的其他方式是什么?请注意,我选择SwingWorker的原因是因为我想在后台进程运行时更新jTextArea。

先感谢您。

最佳答案

您只能一次运行SwingWorker,无一异常(exception)。可能的解决方案包括:

  • 每次需要时都创建一个新的SwingWorker对象,运行它,并在完成后停止并丢弃它。
  • 在程序的整个运行过程中运行一个SwingWorker,不要在按下stop键时取消它,而要暂停它(如何处理取决于我们不知道的代码的非SWING部分),然后将其唤醒按下播放时。状态设计模式可以很好地解决此问题。

  • 关于您的声明,



    考虑在SwingWorker内部为此使用ScheduledExecutorService。 ScheduledExecutorService创建一个ScheduledFuture<V>,如果需要可以将其取消。

    编辑
    您的评论和我的回复:



    否。后台进程将运行一次。由ScheduledExecutorService创建的Future也将被创建,然后在其计划的时间运行。



    将创建多个 future 并将同时开始运行。



    根据我们对您当前项目的了解很难说。是的,这可能会起作用,但是,对于更复杂的需求,然后是,您可能想要使用ScheduledExecutorService。

    关于java - 重复执行Java中的SwingWorker,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18706981/

    10-11 22:10