有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在不同的线程中使用JProgressBar?

我在一个函数中使用POI来填充excel文档的内容(需要10秒),当我调用我的函数时,我想使用JProgressBar来查看进度,但是按钮和程序被阻塞了,我需要在其他线程中执行吗?我该怎么做呢?我的代码示例如下:

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

共 (2) 个答案

  1. # 1 楼答案

    尝试使用调用器,如下面的示例:

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            generarDocumento(nombre);
        });
    
  2. # 2 楼答案

    事件侦听器在UI线程中执行。如果事件侦听器需要很长时间,UI将停止工作/锁定/阻止/挂起

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

    last example in the tutorial包含如何更新进度条的演示代码:https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/components/ProgressBarDemoProject/src/components/ProgressBarDemo.java

    注:链接内容受版权保护;所以我不能在这里复制它