首页 > 代码库 > Java JTextArea不能实时刷新的问题
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();//发送邮件 } }); } }); }
Java JTextArea不能实时刷新的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。