启动Java Swing桌面应用程序的正确方式



启动需要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();
}

你走在了正确的轨道上。希望这能让事情变得更清楚一点。。。

摆动不是线程安全的。话虽如此,您可以做几件事。一种选择是使用SwingUtilities在要执行的事件调度线程上发布Runnable任务。这将使您能够从数据库中检索数据,并在一个单独的线程中更新UI,同时尊重Swing的单线程模型。

SwingUtilities.invokeLater(new Runnable(){
    @Override
    public void run(){
        //  update UI
    } 
});

由于这是一个长时间运行的任务,另一种选择是在完成或处理时使用SwingWorker为UI提供更新。

正如您所看到的,这两种机制(即SwingUtilitiesSwingWorker)都使您能够将这些任务专用于其他线程,同时使您能够在EventQueue上放置结果(通常转化为操作),以便稍后(安全)执行。无论您选择哪一个,重要的是要记住,长时间运行的任务永远不应该发生在EDT中。因此,正如我所发现的,任何设计良好的GUI最重要的功能都是响应能力

相关内容

  • 没有找到相关文章

最新更新