gpt4 book ai didi

Java MVC 何时何地获取我对 EDT 的看法以及我的 Controller 如何对 EDT 执行操作?

转载 作者:行者123 更新时间:2023-11-29 05:28:13 26 4
gpt4 key购买 nike

所以我对 MVC 结构还很陌生。我真的很困惑何时何地在 EDT 上添加我的 Gui 部分。这是我真正困惑的地方:

public class ECPS_MVC {
//edt?
EcpsView view =new EcpsView();//shoud i put it on edt here?? SwingUtilities... etc
//edt?

EcpsModel model =new EcpsModel();
EcpsController controler=new EcpsController(view,model);

}

我看到了关于在使用 mvc 时如何在 edt 上启动 gui 的问题 How to Start a Java MVC Application With a Swing GUI

答案让我吃惊。为什么还要在 edt 上做模型?这真的正确吗?我不这么认为。

所以问题 1- 什么时候将我的 Gui 放在 edt 上最好。当我创建 View 时?问题 2- 我是否必须像这样从我的 Controller 进行更新?每次? -

public void setIconLabel(final Icon icon) {
SwingUtilities.invokeLater(new Runnable() {//with swingutil on each method where i work with gui?
@Override
public void run() {
myLabel.setIcon(icon);
}
});
}

如果您理解,请指出正确的方向,如果需要,请提供简短的示例代码。谢谢。

最佳答案

任何交互或可以改变 UI 的东西都必须在事件调度线程的上下文中进行。

Swing 在设计上不是线程安全的。也就是说,默认库中没有检查来确定各种模型和组件在哪个线程上执行,假设开发人员已经做出了这些决定。

So question1- When is the best time to put my Gui on edt.When i create View?

立即。您无法知道组件何时可以实现(显示在屏幕上和/或附加到 native 对等点)

question 2- Do i have to do updates from my controller like this?Each time? -

不,事实上,如果我发现自己一直这样编码,我会非常担心。确定模型和组件必须在 EDT 的上下文中执行,并使与这些模型和组件交互的任何内容都满足这些要求。

这意味着,如果您从一个单独的 Thread 加载数据,您需要确保在他们更新模型时,他们会将这些更新同步到 EDT,以确保如果模型通知 UI,这一切都发生在 EDT 的上下文中。

不要对模型的状态做出假设,“我知道……”之类的陈述会再次困扰您,尤其是当其他人使用您的 API 时。

除非您亲自创建模型(在 EDT 之外)并保证它在加载时是隔离的,否则不要假设提供给您的任何东西都不会以某种方式附加到 UI。

一个更简单的解决方案是使用 SwingWorker当您想在 EDT 之外执行操作时,因为它通过它的 publish 提供此同步/process/done方法

关于Java MVC 何时何地获取我对 EDT 的看法以及我的 Controller 如何对 EDT 执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976000/

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