在Java中计数 - 文本字段仅显示最后一个值

时间:2013-04-15 18:44:17

标签: java swing counter event-dispatch-thread counting

我在java中模拟处理器计数器时遇到了问题。我想计算例如0到6,并在文本字段中显示计数(0,1,2,3,4,5,6)的当前值。当我点击“计数”按钮时,我的程序冻结片刻,在文本字段中计数后,我只能看到数字6.我想在计数期间看到其他数字。这是我的代码的一部分:

for (int b=0; b<30; b++)
        {
           counter2.Count();
           try {
                    Thread.sleep(300);
                } catch(InterruptedException e){}
           text6.setText("TEST" + counter2.MainReg); }

我该怎么办? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:7)

您需要将计算放在其中一个工作线程上。来自Oracle:

  

当Swing程序需要执行长时间运行的任务时,通常是这样   使用其中一个工作线程,也称为后台线程。   在工作线程上运行的每个任务都由一个实例表示   javax.swing.SwingWorker。 SwingWorker本身就是一个抽象类;您   必须定义一个子类才能创建SwingWorker对象;   匿名内部类通常对创建非常简单有用   SwingWorker对象。

以下是您可以访问并了解如何操作的链接:

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

以下是Oracle关于如何从SwingWorker类实现方法的示例。 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html

由于您希望能够在流程发生时看到结果,因此您可以按照Oracle中的以下示例进行操作:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/interim.html

编辑:正如mKorbel在下面的评论中所建议的那样,您也可以使用此处所述的Swing Timers:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html