【问题标题】:Swing timers and time consuming task摆动计时器和耗时的任务
【发布时间】:2013-12-15 14:31:07
【问题描述】:

我正在开发一个 Swing 应用程序。我需要在后台运行一些任务,因此需要在 TrayIcon 上显示消息。这些任务必须重复执行,经过一些固定的延迟,所以我研究并发现 Swing Timers 是一个不错的选择。但是,与此同时,这些任务可能很耗时,而且我不希望 GUI 冻结或类似的事情(因此,为了满足最后一个要求,我应该使用 Worker Threads)。问题是工作线程不允许我以固定的延迟和“永远”执行这些任务。

我不知道如何解决这个问题,所以任何帮助将不胜感激:)

【问题讨论】:

  • 或者在工作线程中,您可以使用 ScheduledExecutorService。 1+ 到安德鲁的回答。

标签: java multithreading swing timer swingworker


【解决方案1】:

actionPerformedactionPerformed 为实际工作创建一个SwingWorker

【讨论】:

  • 我还不能接受您的回答,但非常感谢!这似乎是合理的:)
【解决方案2】:

您不需要创建任何额外的多线程支持。计时器创建一个新线程来运行 actionPerformed 中的命令。或者,您也可以使用“java.util.Timer”作为您的计时器。它比 swing 更容易,而且每次运行时都会自动创建线程。

   import java.util.*;

之后你可以添加

   Timer t=new Timer();
   t.scheduleAtFixedRate(new TimerTask(){
       void run(){
          // your codes to perform
       }, /*time in miliseconds*/);

这可能会解决您的问题

【讨论】:

  • 你为什么要删除那个问题,它是有效的问题,请重新启用它。在那个问题中,你得到了 4 个反对票,无论如何你也得到了 4 个赞成票。我不知道你为什么要删除那个问题。
【解决方案3】:

您可以创建任务队列。

  1. 创建一个计时器,它会将您的任务调度给某个执行者。 (如 ThreadPoolExecutor)。任何延迟,定期等等。
  2. 注册一个侦听器以完成任务。
  3. Executor 将在后台处理任务。
  4. 当任务准备好时,通过回调通知主应用程序。

不要使用简单的线程。 Java 有很多并发机制,比如 Future 和 Executors。

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多