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();//發送郵件
                    }
                });
            }
        });

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM