更新gui申请

时间:2012-02-10 16:18:36

标签: java multithreading swing user-interface timer

我需要编写一个应用程序,每隔X次检查一次,并将其更新为GUI comtols。 我之前在java中有一点知识并且之前编写过一些应用程序,但我从未处理过多线程和更新GUI之类的东西。

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

有人可以就此给出一些指导吗?我看到了什么?常见的做法是什么? 是线程吗?递归?其他什么?

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

感谢您的努力!

2 个答案:

答案 0 :(得分:6)

我假设你正在使用Swing。如果是,请使用Swing Timer

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

答案 1 :(得分: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中)有很多有趣和优雅,但有时​​你只需要完成工作。用“X时间”替换我的500。确保在EventQueue上进行Swing调用!如果抛出InterruptedException,可能会添加一条消息。

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