zoukankan      html  css  js  c++  java
  • Java JTextArea不能实时刷新的问题

    相信JTextArea用法都了解吧,

    JTextArea textArea = new JTextArea();生成一块空白的区域, 我的需求就是点击发送邮件按钮后,后台的执行日志能输出到textArea中。

    但是我点击发送按钮的时候,由于邮件的附件要好久,界面一直没有日志数据输出,等了一会后,突然一下子刷出一大堆日志。

    不难看出是在等待线程结束导致日志输出滞后,网上可以看到好多解决方案,大致都是这里所说的方式http://15838341661-139-com.iteye.com/blog/1552332

    不过我试了下,还是没解决我的问题!

    于是想另起一个线程搞日志输出

        private ExecutorService service = Executors.newCachedThreadPool(new ThreadFactory() {
            
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r, "output");
            }
        });
       private void updateLog(String content) {
            service.submit(new Runnable() {
                
                @Override
                public void run() {
                    textArea.append("log");
                }
            });
        }

    然而还是不好用,后来发现点击发送按钮后整个界面都卡住,才意识到是按钮的发邮件事件阻塞了Frame整个线程(不知道这么说是否确切),才导致JTextArea没法实时显示日志

    于是稍作修改,在按钮监听到发邮件事件时,另起一个线程来执行发邮件行为,结果问题解决了

     public void sendMail() {
    
            sendButton.addActionListener(new ActionListener() {
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    service.submit(new Runnable() {
                        
                        @Override
                        public void run() {
                            send();//发送邮件
                        }
                    });
                }
            });
    
        }

  • 相关阅读:
    redis报错io.lettuce.core.RedisCommandTimeoutException: Command timed out after
    showloading showtoast一起用
    uniapp,mpvue微信,支付宝兼容性说明
    uniapp 自定义组件
    Vue 函数式组件 functional
    mac uninstall node ,npm from official
    mpvue问题记录:组件方法执行机制
    linux 文件 分割重组
    MySql日期操作
    .NET Core连接数据库
  • 原文地址:https://www.cnblogs.com/Forrest-Janny/p/6610759.html
Copyright © 2011-2022 走看看