swing窗口加载太慢

我正在开发一个swing项目,由多个文件组成,使用vscode开发,但每次运行一分钟左右才能加载出所有组件,我有什么可以解决的办法?

在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。

问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现这个效果,就是执行以下语句

textArea.paintImmediately(textArea.getBounds());

textArea.paintImmediately(textArea.getX(), textArea.getY(), textArea.getWidth(), textArea.getHeight());

这时,你会发现你刚才append的消息已经被实时地显示出来了。

方法二:

Swing线程之SwingUtilities.invokeLater解释:http://www.importnew.com/

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });

方法三:

不难看出是在等待线程结束导致输出滞后

或许你点击按钮后整个界面都卡住,按钮的事件阻塞了Frame整个线程(不知道这么说是否确切),才导致JTextArea没法实时显示信息



private ExecutorService service = Executors.newCachedThreadPool(new ThreadFactory() {
        
        @Override
        public Thread newThread(Runnable r) {
            return new Thread(r, "output");
        }
});

public void append() {
        button1.addActionListener(new ActionListener() {        
            @Override
            public void actionPerformed(ActionEvent e) {
                service.submit(new Runnable() {                 
                    @Override
                    public void run() {
                        巴拉巴拉啦
           巴拉巴拉巴拉
           等处理方法
                    }
                });
            }
        });
    }