让我们假设我们有一个简单的Java MVC应用程序与类Model
,View
和Controller
。 View
类直接继承JFrame
。如在classic MVC setup,视图具有对模型的引用,并且控制器具有到视图和所述模型的引用。 正如我刚才了解到,所有的GUI相关的东西应该被包裹在一个类似SwingUtilities.invokeLater
什么的。现在什么是正确的方式来初始化/启动这个应用程序?我认为模型和控制器的创建不应该在EDT内部,对吧?所以我会想出这样的事情:如何启动一个Java MVC应用程序与Swing GUI的
final Model model = new Model();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final View view = new View(model);
new Thread(new Runnable() {
@Override
public void run() {
new Controller(model, view);
}
}).start();
}
});
这是正确的方式和一个好主意或有更好的可能性吗?
编辑: 正如@trashgod所述,我们检查了一个相关示例here。然后,我延长我的问题:什么是基本做到有以下几点:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Model model = new Model();
View view = new View(model);
new Controller(model, view);
}
});
不过,是不是错了运行在EDT整个应用程序?
我“猜”控制器将需要一些方法来“启动”或“表演”的观点......还有,你不应该使用第二个' Thread'对于这一点,只要你粘贴到'SwingUtilities.invokeLater'了'Runnable'的'run'方法的上下文中执行的更新,让你的所有UI交互的EDT的范围内发生... – MadProgrammer
一个相关的实施例,检查在[此处](http://stackoverflow.com/a/3072979/230513)。 – trashgod
查看更新的问题。 @MadProgrammer:该视图已设置并在其构造函数调用中变为可见。然后通过模型事件更新(模型扩展了Observable,视图观察模型)。 – Simon