簡體   English   中英

如何在其他線程中使用JProgressBar?

[英]How to use a JProgressBar in a different Thread?

我在函數中使用POI來填充我的excel文檔的內容(需要10秒),當我調用函數時,我想使用JProgressBar來查看進度,但是按鈕和程序是阻塞的,我需要做其他線程? 我該怎么辦? 我的代碼示例:

btnEjecutar.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
        //the function
        generarDocumento(nombre);
            }

事件偵聽器在UI線程中執行。 如果事件偵聽器花費很長時間,則UI將停止工作/鎖定/阻止/掛起。

我的猜測是方法generarDocumento()需要很長時間。 如果希望UI繼續工作,則必須在輔助線程中運行它。 Java文檔包含如何執行此操作的幾個示例: https : //docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

教程中的最后一個示例包含如何更新進度條的演示代碼: https : //docs.oracle.com/javase/tutorial/displayCode.html? code =https : //docs.oracle.com/javase/tutorial/ uiswing / examples / components / ProgressBarDemoProject / src / components / ProgressBarDemo.java

注意:鏈接的內容受版權保護; 因此我不能在這里復制它。

嘗試使用invokeLater,例如下面的示例:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        generarDocumento(nombre);
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM