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调用虽然完美。基本上我想知道我应该怎么做才能让标签显示它已经设置的新文本。
这需要多线程。您的标签没有更新,因为您的唯一线程正在用于运行在“后台”中运行的其他代码,直到完成,您的GUI不会更新。多线程在需要时未被使用时的一个常见问题。这是关于[Concurrency]的Java Oracle教程(http://docs.oracle.com/javase/tutorial/essential/concurrency/),它包含了解决您的问题需要了解的多线程的一切,并且是完美的开始学习关于编程的更困难和必要的概念之一。 http://docs.oracle.com/j – CODe 2012-11-10 04:41:03