簡體   English   中英

正確啟動Java Swing桌面應用程序的方法

[英]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提供更新。

正如您所看到的,這兩種機制(即SwingUtilitiesSwingWorker )使您能夠將此類任務專用於其他線程,同時使您能夠在EventQueue上放置結果(通常轉換為操作)以供日后使用(並且安全執行。 無論您選擇哪一個,重要的是要記住長時間運行的任務永遠不應該在EDT 因此,正如我所發現的,任何精心設計的GUI的最重要特征是響應性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM