如何在不同的线程中使用 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 将停止 working/lock up/block/hang.

我的猜测是 generarDocumento() 方法需要很长时间。如果您希望 UI 继续工作,您必须 运行 它在工作线程中。 Java 文档包含几个如何执行此操作的示例:https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

last example in the tutorial contains demo code how to update a progress bar: 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);
    });