讓我們假設我們有一個簡單的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