gpt4 book ai didi

java - 正确更新 Swing 组件

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:35 24 4
gpt4 key购买 nike

我一直在设置 swing 组件的值,就像我设置任何其他变量一样,但是我遇到了这个页面 - https://bitguru.wordpress.com/2007/03/21/will-the-real-swing-single-threading-rule-please-stand-up/ - 似乎我正在使用事件调度线程对 swing 组件进行所有更改 -

那么,这是正确的吗,我是否应该更改我从中更新 swing 组件的所有代码

    String name = this.getNameTextfield().getText();
String password = new String(this.getPasswordField().getPassword());
String confirmPassword = new String(this.getConfirmPasswordField().getPassword());

为了这个?

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
String name = this.getNameTextfield().getText();
String password = new String(this.getPasswordField().getPassword());
String confirmPassword = new String(this.getConfirmPasswordField().getPassword());
}
});

这是标准做法吗?

编辑:糟糕,只是复制并粘贴了一些我的组件相关代码,忽略了它没有更新组件的事实。

最佳答案

Swing 圣经有一个 chapter on concurrency , 底线:

all code that creates or interacts with Swing components must run on the event dispatch thread

(重点是我的)

所以是的,您始终必须确保所有访问、读取或写入都发生在 EDT 上。

好的方面:一旦应用程序在 EDT 上正确启动,您就已经了,几乎所有访问都自然地发生在 EDT 上。仅当您显式启动另一个线程(例如执行冗长的后台任务)并需要向用户界面报告时,情况才不是这样:然后您必须将访问调用包装到 invokeLater 中(或使用在内部执行此操作的 SwingWorker)

关于java - 正确更新 Swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com