在我的JFrame中循环执行某些任务,我想在JFrame标题中看到状态,所以我有这样的事情:
frame.setTitle(“当前状态[”+ Auto_Count_Id +“/”+ Auto_Count_Total +“]”);
但它并没有重新粉刷,因为我需要它。所以我尝试了以下内容:
<1>
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
frame.setTitle("Current status [ "+Auto_Count_Id+"/"+Auto_Count_Total+" ]");
}
});
和
<2>
// repaint(long time, int x, int y, int width, int height)
frame.repaint(10,0,0,500,300)
它们也不起作用,它只在任务完成后重新绘制,我该怎么办?
答案 0 :(得分:3)
不要在Swing的事件线程中做繁重的工作。为计算创建一个新线程,以便Swing可以使用其线程重新绘制GUI。
答案 1 :(得分:0)
查看SwingWorker课程。
答案 2 :(得分:0)
是的,SwingWorker是要走的路。
如果您使用的是Java 6,它附带了一个包含publish()和process()方法的SwingWorker版本。这些方法在那里,您可以在执行长时间运行的任务时发布数据,然后您可以在事件调度线程中发布该数据。
您可以做的是创建一个SwingWorker子类,其中定义了长时间运行的任务。然后,在该长时间运行的任务中,使用publish()方法发布JFrame标题字符串。覆盖处理方法以设置JFrame的标题。