码迷,mamicode.com
首页 > 编程语言 > 详细

Java JTextArea不能实时刷新的问题

时间:2017-03-24 14:02:25      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:mail   out   tput   mit   code   form   ram   runnable   height   

相信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();//发送邮件
                    }
                });
            }
        });

    }

技术分享

Java JTextArea不能实时刷新的问题

标签:mail   out   tput   mit   code   form   ram   runnable   height   

原文地址:http://www.cnblogs.com/Forrest-Janny/p/6610759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!