2010-07-29 80 views
0

我正在NetBeans中创建一个应用程序,并且希望有一个状态标签来说明在任何特定时刻程序中发生了什么。有很多代码,但是它的功能大致如下:只需假装statusLabel是已经放入程序的标签,并且每个函数都是一个耗时几秒钟的昂贵函数。如何更新标签以使其显示新文本?

statusLabel.setText("Completing Task 1"); 
System.out.println("Completing Task 1"); 
this.getFrame().repaint(); //I call this function and the two functions below it but the label still does not change. 
statusLabel.updateUI(); //Doesn't seem to do much. 
statusLabel.revalidate(); //Doesn't seem to do much. 
this.completeTask1(); 
statusLabel.setText("Completing Task 2"); 
System.out.println("Completing Task 2"); 
statusLabel.revalidate(); 
this.getFrame().repaint(); 
... 

这一直持续到UI完成4项任务。在整个过程中,标签不会更新,直到每个任务完成后,然后它会显示“完成任务4”。 System.out.println调用虽然完美。基本上我想知道我应该怎么做才能让标签显示它已经设置的新文本。

+0

这需要多线程。您的标签没有更新,因为您的唯一线程正在用于运行在“后台”中运行的其他代码,直到完成,您的GUI不会更新。多线程在需要时未被使用时的一个常见问题。这是关于[Concurrency]的Java Oracle教程(http://docs.oracle.com/javase/tutorial/essential/concurrency/),它包含了解决您的问题需要了解的多线程的一切,并且是完美的开始学习关于编程的更困难和必要的概念之一。 http://docs.oracle.com/j – CODe 2012-11-10 04:41:03

回答

1

代码的答案是正确的,但我会用SwingWorker类去:

的抽象类在专用线程中执行长时间GUI交互任务。

这是您的问题的正确工具。