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 进度条反馈 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后

随机推荐

  • 如何使用 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