[英]Proper way to start Java Swing desktop application
啟動應用程序需要5-10秒從數據庫中檢索初始數據的正確方法是什么? 這是我到目前為止所得到的,但我不確定沒有更好的方法。 我希望GUI和數據庫訪問將在不同的線程中,以便GUI構建將與數據檢索同時發生。
public static void main(String[] args) {
final Controller controller = new Controller();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
View frame = new View();
controller.setView(frame);
}
});
Model model = new Model();
controller.setModel(model);
controller.getInitialData();
}
你正處於正確的軌道上。 希望這會讓事情變得更加清晰......
Swing不是線程安全的。 話雖這么說,你可以做幾件事。 一種選擇是使用SwingUtilities
在要執行的事件調度線程上發布Runnable
任務。 這將使您能夠從數據庫中檢索數據並在單獨的線程中更新UI,同時遵循Swing的單線程模型。
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
// update UI
}
});
另一個選項,因為這是一個長期運行的任務,是使用SwingWorker
在完成或處理時為UI提供更新。
正如您所看到的,這兩種機制(即SwingUtilities
和SwingWorker
)使您能夠將此類任務專用於其他線程,同時使您能夠在EventQueue
上放置結果(通常轉換為操作)以供日后使用(並且安全執行。 無論您選擇哪一個,重要的是要記住長時間運行的任務永遠不應該在EDT
。 因此,正如我所發現的,任何精心設計的GUI的最重要特征是響應性 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.