0

在我的 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) 

他们也不工作,它只是在任务完成后重新绘制,我该怎么办?

4

3 回答 3

3

不要在 Swing 的事件线程中做繁重的工作。为您的计算创建一个新线程,以便 Swing 可以使用它的线程重新绘制 GUI。

于 2009-03-19T22:12:06.070 回答
0

是的,SwingWorker 是要走的路。

如果您使用的是 Java 6,它会附带一个包含 publish() 和 process() 方法的 SwingWorker 版本。这些方法让您可以在执行长时间运行的任务时发布数据,然后您可以在 Event Dispatch Thread 中发布该数据。

您可以做的是创建一个 SwingWorker 子类,其中定义了长时间运行的任务。然后,在那个长时间运行的任务中,使用 publish() 方法发布 JFrame 标题字符串。覆盖 process 方法以设置 JFrame 的标题。

这是 Java 6 的 SwingWorker API 文档

于 2009-03-20T17:15:26.043 回答
0

看一下SwingWorker类。

于 2009-03-19T22:30:33.733 回答