使用Threads在同一个jframe上执行操作

时间:2013-01-18 06:15:08

标签: java multithreading swing

我需要开发java代码以使JFrame具有文本字段和按钮。使用线程,我需要在JFrame的标题栏中每隔一分钟更新一次。使用另一个线程我需要在控制台中显示文本框值当一个按钮被点击时。我有代码执行这两个操作(更新每分钟的时间和获取文本框值),但我不知道如何在同一个类中添加两个线程。如果有人知道请帮助我

1 个答案:

答案 0 :(得分:1)

Swing中你要问的是危险的事情。 Swing个组件不是thread-safe,只能从Event Dispatching Thread(也称为EDT或Swing Thread)进行更新。为此,Swing具有SwingUtilities.invokeLater(Runnable)等实用程序方法,它们将在EDT上执行Runnable中的代码(将来的某个时间点)。我们的想法是,您可以将代码放在单独的JFrame内进行Swing-things(例如更新Runnable的标题与时间)并将其传递给invokeLater()

为此,您可以创建一个匿名的Runnable类:

Runnable updateJFrame = new Runnable () {
    public void run () {
        myJFrame.setTitle("My New Title");
    }
};

SwingUtilities.invokeLater(updateJFrame);

使用invokeLater()还可确保组件在更新后正确刷新/重新绘制。 (你在使用静态时看到的行为实际上可能是一个刷新/重绘问题。)这个故事的寓意是,如果你在非EDT线程上操纵Swing组件,所有的赌注都会被关闭。