我知道使用这个方法,将runnable参数提交给系统EventQueue。 但是所有的 GUI 更新都应该使用这种方法来完成吗?我的意思是,如果我想说,更改 JButton 的文本,我应该使用这样的东西吗:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
jButton1.setText("changed text");
}
});
如果我应该使用这种方法,我们可以使用什么模式来避免这种重复代码?
最佳答案
你只需要使用invokeLater
当您想从另一个不是 UI 线程(事件调度线程)的线程更新您的 UI 时。
假设您有一个用于单击按钮的处理程序,并且您希望在有人单击该按钮时更改标签的文本。然后直接设置标签文字就完美保存了。这是可能的,因为按钮单击事件的处理程序在 UI 线程中运行。
但是,假设在单击另一个按钮时启动另一个 线程来执行一些工作,并且在这项工作完成后,您想要更新 UI。然后使用 invokeLater
。此方法可确保您的 UI 更新在 UI 线程上执行。
所以在很多情况下,你不需要invokeLater
,直接更新UI即可。如果不确定,可以使用 isDispatchThread
检查您当前的代码是否在事件分派(dispatch)线程内运行。
关于java - 我们应该为 Java 桌面应用程序中的任何 GUI 更新使用 EventQueue.invokeLater 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541373/