我在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); }
我该怎么办? 谢谢你的帮助。
答案 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