- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我对 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/
我正在编写一个应用程序,用户可以在其中上传 .rdf 文件,然后对其执行 SPARQL 查询。现在我陷入了如何格式化查询结果的困境。例如:ASK-查询输出 boolean 值,SELECT-查询返回结
我有一个非常大的表(将近 2,000,000 条记录)拆分为 2 个较小的表。一张表只包含上周的记录,另一张表包含所有其余的(很多......) 现在我得到了一些存储过程/函数,用于在拆分之前查询大表
我是 iOS UI 开发的新手。我陷入了以下问题。 我试图将父 View 宽度的一半分配给 2 个 subview 。 (见图)。我不能将乘数设置为小于零。红色和绿色 subview 的宽度应相等,宽
我是一名优秀的程序员,十分优秀!