Java 进度条反馈

2023-12-01

我有 MainProgramWindow GUI。该GUI有一些变量和一键调用Sql类的createExcel方法并同时启动进度条。

    public class MainProgramWindow extends javax.swing.JFrame {

    package AgentStatGenerator;
    //Rest of code.

       class Sql {

       //Rest of code.    
          public int newvalueforpbar = 0;
          SwingProgressBarExampleOLD2 progressbar = new SwingProgressBarExampleOLD2();

          public void createExcel() {

          try{
          //Rest of code.

          stmt = con.createStatement();
          rs1 = stmt.executeQuery(query1);

          while (rs1.next()) {
                HSSFRow row2 = sheet.createRow((short) index);
                 Cell cell100 = row2.createCell((short) 0);
                 cell100.setCellValue(rs1.getString(1));
                 cell100.setCellStyle(stylersinfo);
                 Cell cell101 = row2.createCell((short) 1);
                 cell101.setCellValue(rs1.getInt(2));
                 cell101.setCellStyle(stylersthousand);
                 Cell cell102 = row2.createCell((short) 2);
                 cell102.setCellValue(rs1.getDouble(3));
                 cell102.setCellStyle(stylersdouble);
                index++;
                newvalueforpbar = 50;
                progressbar.updateBar(newvalueforpbar);
               }

            rs2 = stmt.executeQuery(query2); 

            while (rs2.next()){   
                HSSFRow row3 = sheet.createRow((short) index);
                 Cell cell103 = row3.createCell((short) 0);
                 cell103.setCellValue(rs2.getString(1));
                 cell103.setCellStyle(stylersinfo);
                 Cell cell104 = row3.createCell((short) 1);
                 cell104.setCellValue(rs2.getInt(2));
                 cell104.setCellStyle(stylersthousand);
                 Cell cell105 = row3.createCell((short) 2);
                 cell105.setCellValue(rs2.getDouble(3));
                 cell105.setCellStyle(stylersdouble);
                index++;
                newvalueforpbar = 100;
                progressbar.updateBar(newvalueforpbar);

               }

            catch(Exception ex){    
             JOptionPane.showMessageDialog(null, ex.toString());
                  }
              }

        }


      }

    private void createExcelButonActionPerformed(java.awt.event.ActionEvent evt) {                                                 
    Sql sql1 = new Sql ();
    SwingProgressBarExampleOLD2 progressbar = new SwingProgressBarExampleOLD2();
    progressbar.startProgress();
    sql1.createExcel();
    }  
 }

我的 SwingProgressBarExampleOLD2 类

package AgentStatGenerator;

import java.lang.reflect.Constructor;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

/**
 *
 * @author Lacrymae_Ev
 */
public class SwingProgressBarExampleOLD2 extends JPanel {

  JProgressBar pbar;

  static final int MY_MINIMUM = 0;

  static final int MY_MAXIMUM = 100;

  public SwingProgressBarExampleOLD2() {
    // initialize Progress Bar
    pbar = new JProgressBar();
    pbar.setMinimum(MY_MINIMUM);
    pbar.setMaximum(MY_MAXIMUM);
    // add to JPanel
    add(pbar);
  }

  public void updateBar(int newValue) {
    pbar.setValue(newValue);
  }


  public void startProgress() {

    final SwingProgressBarExampleOLD2 it = new SwingProgressBarExampleOLD2();

    JFrame frame = new JFrame("ProgressBar");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(it);
    frame.pack();
    frame.setVisible(true);

  }
}

当我在 MainProgramWindow GUI 中按下 createExcelButon 时,sql1.createExcel() 方法成功执行并开始工作,我的进度条也出现。但只有进度条的 jframe 未填充 bpar,并等待 sql1.createExcel() 完全完成。

当 sql1.createExcel() 完全完成并在定义的位置创建 Excel 文件时,进度条 jframe 填充了 pbar 但进度条没有进度。但我用progressbar.updateBar(newvalueforpbar);给pbar喂食在每个 while 语句结束之后。

P.S:如果我从按钮中删除 pbar 调用,我的程序将成功运行并创建具有所需格式的 Excel 文件。我的问题是进度条喂食。

提前致谢。


您正在同一线程中执行所有任务事件调度线程。解决这个问题的一个好方法是在单独的线程中执行业务代码,这样就不会阻塞 gui,并且您可以更新 gui,而无需等待业务代码完成。 Swing 提供摇摆工人类来实现这一点。这里有一个带有进度条的很好的例子。摇摆工人示例.

阅读更多如何使用进度条.

简单地说,您所做的就是创建一个 swingWorker 子类并覆盖doInBackGround().

Example:

  public class Worker extends SwingWorker<Void, Void> {

        @Override
        protected Void doInBackground() throws Exception {
           //here you make heavy task this is running in another thread not in EDT
           int i = 0;
           setProgress(i);
           // call query 1
           while(i < 50){
             setProgress(i++);
             Thread.sleep(5); // random magic number
           }
           // then call query 2
           while(i <= 100){
             setProgress(i++);
             Thread.sleep(5); // random magic number
           }

           return null;
        }
    }

在您的客户端代码中,您有进度条:

SwingWorker myWorker = new Worker();
myWorker.addPropertyChangeListener(new PropertyChangeListener() {
  @Override
  public void propertyChange(final PropertyChangeEvent event) {
    switch (event.getPropertyName()) {
    case "progress":
      myProgressBar.setIndeterminate(false);
      myProgressBar.setValue((Integer) event.getNewValue());
      break;
    }
 }
});
//then to get start you have to use execute()
worker.execute();

在这里你有一个example和另一个one

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 进度条反馈 的相关文章

  • “java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别

    如果我设置一个套接字 SoTimeout 并从中读取 当读取时间超过超时限制时 我会收到 SocketTimeoutException 读取超时 这是我的例子中的堆栈 java net SocketTimeoutException Read
  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com

随机推荐

  • 如何使用 Microsoft Graphs 访问共享邮箱

    是否可以使用图表访问共享邮箱 我想使用图表访问共享邮箱邮件文件夹 只需将其视为任何其他用户即可 https graph microsoft com v1 0 users 电子邮件受保护 消息 确保您设置了正确的权限 Mail Read Sh
  • Django:将值从模板传递到视图

    我遇到过这种情况 单击 html 提交按钮 我调用views stream response哪个 激活 views stream response generator哪个 激活 流 py并返回一个流式Http响应我每秒都会看到一个渐进的数字
  • 如何从 xamarin.forms 中的应用程序打开设置?

    我正在研究 xamarin forms 仅在android中面临以下问题 当我的应用程序启动时 它会检查我的 GPS 位置是否打开或关闭 要检查 GPS 位置的开启或关闭 我正在使用依赖服务 public static bool Check
  • 合并 R 中的唯一值

    这是示例数据 set seed 123 data1 lt data frame id1 rep 1 5 each 2 nam1 rnorm 5 1 data2 lt data frame id2 rep 3 12 each 2 nam2 r
  • 您最喜欢的使用 Bash 的命令行技巧是什么? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前
  • 如何在选项卡之间切换时停止执行 AsyncTask,同时保留之前的内容

    让我解释一下我的问题 假设我有三个选项卡 片段 ab1 片段 ab2 片段 ab3 现在我在 FragmentTab1 中有列表视图 这里我使用AsyncTask加载数据OnCreateView 数据正在完美加载 现在 当我查看详细信息并再
  • asp.net中缓存过期时的回调

    有谁知道当缓存过期时如何在 ASP NET 中运行函数的教程或示例 我读过有关缓存过期时进行的回调的信息 但我没有找到任何示例 我需要这个来做网站 它需要在每天的确切时间执行一个函数 hhh3112 当缓存过期时 您可以使用回调 你能再解释
  • 以24小时制显示日期

    我正在使用简单的应用程序 我可以在其中获取最新信息DateTime并将其转换为24 hour format Code String DATE yyyy MM dd hh mm ss yyyy MM dd hh mm ss String DA
  • war webapp 中 Tomcat 服务器绝对文件访问

    我有一个 Spring web 应用程序 war文件已上传至 Tomcat 服务器 大多数基本功能都按预期工作 页面视图和表单提交 我现在的问题是我的 web 应用程序需要读取和写入文件 而我对如何实现这一点一无所知 文件 I O 返回ja
  • jQuery绑定粘贴事件,如何获取粘贴的内容

    我有一个 jquery token tagit 插件 我想绑定到粘贴事件以正确添加项目 我可以像这样绑定到粘贴事件 bind paste paste input function paste input e console log e re
  • 使用简单的注入器注册 Web API 控制器的子集

    我正在手动注册项目的 Web API 控制器的子集 container Register typeof ILGTWebApiController controllerType Lifestyle Transient 工作正常 但是 当我运行
  • 从 python 脚本调用 scrapy 不创建 JSON 输出文件

    这是我用来调用 scrapy 的 python 脚本 答案是 从脚本中抓取的 Scrapy 总是在抓取后阻止脚本执行 def stop reactor reactor stop dispatcher connect stop reactor
  • Code Golf:数学表达式评估器(尊重 PEMDAS)

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我挑战你编写一个遵守 PEMDAS 运算顺序 括号 求幂 乘法 除法 加法 减法 的数学表达式求值器 而不使用正则表达式 预先存在
  • Django 中两个模型的一种 url 模式

    Django 中的两个模型是否可以使用一个 url 模式 我有两个模型 游戏和类别 我想要这两个模型都有一个 url 模式 ios games category name and ios games game name 因此类别模式应该首先
  • 在 Flex URLRequest 中设置 cookie

    我正在尝试在 Flex 中设置 cookie 但似乎不起作用 难道我做错了什么 这可能吗 看来这件事应该很简单 var fileRef FileReference fileRef is configured var cookieString
  • Facebook php SDK getLogoutUrl() 问题

    当我想从我的网站注销用户时 我使用 logoutUrl facebook gt getLogoutUrl array next gt logout php And logoutUrl显示正确的链接 但它没有将我重定向到下一步中指定的网址 它
  • Drupal 7 - 根据内容数据隐藏内容编辑表单的某些表单字段

    在Drupal 7中 有没有办法根据特定内容更改内容类型的标准编辑形式 例如 我有一个带有复选框的内容类型 一旦选中并保存表单 我不希望该复选框再可见 因此 根据数据库中的复选框值 我想在以下情况下隐藏表单字段显示表格 我正在构建一个小型的
  • XML 到 LINQ 并检查空元素

    我面临的情况是使用 Linq 将 XML 文档解析为对象 在解析过程中 我会检查以确保 Elements 不为空 然后再继续解析它们的值 有没有办法简化这个声明 var variable from x in xdoc Descendants
  • 使用流按 List 对 Map 进行排序

    Map
  • Java 进度条反馈

    我有 MainProgramWindow GUI 该GUI有一些变量和一键调用Sql类的createExcel方法并同时启动进度条 public class MainProgramWindow extends javax swing JFr