【问题标题】:updated gui application更新的 gui 应用程序
【发布时间】:2012-03-03 02:40:31
【问题描述】:

我需要编写一个应用程序,该应用程序将每 X 次检查一次并将其更新到 GUI comtols。 我对 java 有一点了解,之前写过一些应用程序,但我从来没有处理过多线程和更新 GUI 之类的东西。

虽然这将是一件容易的事,所以我开始编写我的软件。其他一切都在正常运行。我只是不能让应用程序每 X 次执行检查,然后更新 GUI。

有人可以就此提供一些指导吗?我要调查什么?常见的做法是什么? 是线程吗?递归?还有什么?

如果可能的话,给我一些代码示例,我可以更好地理解。

感谢您的努力!

【问题讨论】:

    标签: java multithreading swing user-interface timer


    【解决方案1】:

    我假设您使用的是 Swing。如果是这样,请使用Swing Timer

    或者,如果检查本身是一些不能在 GUI 线程中完成的长时间运行的任务(因为它会冻结它),那么使用 SwingWorker 并将其提交给由 @ 创建的 ScheduledExecutorService 987654324@班级。

    【讨论】:

      【解决方案2】:

      尝试类似:

      private volatile boolean  killCheck;
      
      public void startChecking()  {
          killCheck = false;
          Thread  checker = new Thread()  {
              public void run()  {
                  for (;;)  {
                      try { Thread.sleep( 500 ); }
                      catch (InterruptedException ie)  { break; }
                      if (killCheck)  break;
                      EventQueue.invokeLater( new Runnable()  {
                          public void run()  {
                              // Update GUI here on EventQueue.
                          }
                      } );
                  }
              }
          };
          checker.start();
      }
      
      public void stopChecking()  { killCheck = true; }
      

      计时器(至少有两个,在 swing 和 util 中)非常有趣且优雅,但有时​​您只需要完成工作即可。将我的 500 替换为您的“X 时间”。确保在 EventQueue 上进行 Swing 调用!如果抛出 InterruptedException,可能会添加一条消息。

      查看 SwingWorker;它会以更安全的方式做同样的事情,但如果你要做很多这样的事情,你可能会发现自己做更有力量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 2014-12-03
        • 1970-01-01
        • 2017-02-01
        相关资源
        最近更新 更多