0

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

4

1 回答 1

1

你问的是在Swing. Swing组件不会thread-safe也应该只从Event Dispatching Thread(也称为EDT或 Swing Thread)更新。为此,Swing具有实用方法,例如SwingUtilities.invokeLater(Runnable)将在EDT. 这个想法是你将你的代码JFrame放在一个单独的内部做 Swing 的事情(比如随着时间更新标题)Runnable并将它传递给invokeLater().

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

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

SwingUtilities.invokeLater(updateJFrame);

使用invokeLater()还可以确保组件在更新后正确刷新/重新绘制。(您在使用静态时看到的行为实际上可能是刷新/重绘问题。)这个故事的寓意是,如果您在非 EDT 线程上操作 Swing 组件,那么所有的赌注都将失败。

于 2013-01-18T07:47:47.240 回答