0

我在java中模拟处理器计数器时遇到问题。例如,我想从 0 计数到 6,并在 Text 字段中显示当前计数值 (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); }

我能用它做什么?感谢你们对我的帮助。

4

1 回答 1

7

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

当 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

于 2013-04-15T18:46:55.583 回答