计算进行时显示进度条

2024-02-06

我正在编写代码来计算 Pi 的值,有时可能需要很长时间才能计算。我添加了一个进度条来显示进度,但代码完全按照我的指示执行,它在计算后打开进度条,然后立即关闭它(当值达到 100 时它会关闭。) 我试图将进度条的代码粘贴到循环中,但很快我意识到这解决了解决方案,但创建了多个进度条窗口。 如果放在计算之前,进度条保持为0(显然) 我在下面显示了我的代码:

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.border.Border;
import java.util.Scanner;

public class PicCalc 
{
public static void main(String args[]) 
{
  Scanner keyboard = new Scanner(System.in);
  double i = 0;
    double stage = 1;
  int iterations = 1;
    int x = 3; //Simply a variable to calculate pi
  double y = -1.0; // Another variable for pi
    double myPi; //This is my calculation of Pi, don't eat it. 

  System.out.println("Hello! I calculate Pi and compare it to the acutal value of Pi!");
  System.out.println("How many iterations?");
  iterations = keyboard.nextInt();

  //Calculates Pi
  for (i = 1.0; i <= iterations; i++)
  {
         stage = stage + y/x;
         y = - y; //Flips Sign
         x+=2; 
  }

    myPi = 4*stage;
    System.out.println("My Pi: " + myPi);
    //STOP CALCULATING PI

    //CALCULATE PERCENT COMPLETE
  double percent = 100*(i/iterations);
  int intPercent = (int) (percent + 0.5); //Adds .5 in order to round.
  //STOP CALCULATING PERCENT COMPLETE

  //MAKES LOADING SCREEN
  JFrame f = new JFrame("Loading...");
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  Container content = f.getContentPane();
  JProgressBar progressBar = new JProgressBar();
  progressBar.setValue(intPercent);
  progressBar.setStringPainted(true);
  Border border = BorderFactory.createTitledBorder("Calcualating...");
  progressBar.setBorder(border);
  content.add(progressBar, BorderLayout.NORTH);
  f.setSize(300, 100);
  f.setVisible(true);
  //END OF MAKING LOADING SCREEN

 //CLOSES LOADING SCREEN WHEN 100% IS ACHIEVED
  if (percent >= 100)
  {
     f.dispose();
  }      
  //END OF CLOSING SCREEN HERE

你只有一个线程,所以 GUI 永远没有机会更新(因为它正忙于计算)。

正常的方法是将计算放在后台线程中,以便事件调度线程 (EDT) [又名 GUI 线程] 可以自由地更新 GUI。

请参阅这些以获得一些指导,谷歌会发现更多。

如何使用事件调度线程? https://stackoverflow.com/questions/7896723/how-do-you-use-the-event-dispatch-thread

Java后台线程 https://stackoverflow.com/questions/15026996/java-background-thread

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

计算进行时显示进度条 的相关文章

随机推荐

  • Fallocate 和 ftruncate 之间有什么区别

    根据我的测试 他们都可以改变文件大小 为什么他们都可以将文件变大或变短 Fallocate 和 ftruncate 和有什么区别 ftruncate是一个简单的 单一用途的函数 根据 POSIX 文档 http pubs opengroup
  • 汇编程序中的寻址

    有件事我无法消化 我正在学习一些汇编程序 现在我正在学习寻址章节 我理解用于解除引用的括号的概念 但不知怎的 当我看到它的用法时 我就是无法理解它的要点 更准确地说 我的困惑是从这里开始的 mov al L1 在这里 我假设 L1 作为示例
  • 由于事务之间的读/写依赖关系,无法序列化访问

    我最终成功地重现了序列化问题这个问题 https stackoverflow com q 21706858 274677到 SSCCE 最短的独立完整示例 我正在使用jdbc and java标签 尽管我相信这不是 Java 或 JDBC
  • 如果查询中没有这样的键,如何关闭AWS连接

    我正在使用 AWS java SDK 将文件上传到 AWS 管理控制台的存储桶上 但是 如果当我第一次尝试访问该文件时在线上没有这样的文件 我的代码将捕获异常 NoSuchKey 然后我想关闭连接 问题是我没有任何引用来关闭该连接 因为异常
  • PySpark 中内存高效的笛卡尔连接

    我有一个大型字符串 id 数据集 可以放入 Spark 集群中单个节点的内存中 问题是它消耗了单个节点的大部分内存 这些 ID 的长度约为 30 个字符 例如 ids O2LWk4MAbcrOCWo3IVM0GInelSXfcG HbDck
  • 如何从 nuxtjs 服务器中间件获取 POST 数据?

    如何从 nuxtjs 服务器中间件获取 POST 数据 到目前为止 我已经成功地为 GET 做到了这一点 但对于 POST 来说 正文不存在 req body未定义 将其添加到nuxt config js serverMiddleware
  • IPython 笔记本到幻灯片:Reveal 未定义

    我正在使用 nbconvert 从我的笔记本制作一个 Reveal js 幻灯片 具体来说 我正在运行 ipython nbconvert to slides analysis ipynb 这将创建 analysis slides html
  • 发送带有数据库的应用程序

    如果您的应用程序需要数据库并且它带有内置数据 那么发布该应用程序的最佳方式是什么 我是不是该 预先创建 SQLite 数据库并将其包含在 apk 在应用程序中包含 SQL 命令并让它创建数据库并在首次使用时插入数据 我看到的缺点是 可能的
  • 如何将所有路由重定向到 gatsby 索引

    我正在尝试创建一个只有一页来处理所有路线的 Gatsby 项目 我有这样的索引页面 const App gt return
  • 如何将作业放入詹金斯的文件夹中?

    我正在尝试使用 jenkins DSL 脚本将作业放入文件夹中 现在我创建一个 listView 并将我正在使用的代码放入我的工作中 listView MyJobsList jobs map each name it key trim co
  • 如何将一个存储库的公共子文件夹与另一个存储库同步?

    我有一个软件项目foo在我公司托管的内部 GitLab 存储库上 并希望将其部分发布为开源项目baa在 GitHub 上 假设我将公共部分放在 public 文件夹中 foo public 以及文件夹 private 中的私有部分 foo
  • 在列表中查找因素的最有效方法是什么?

    我想要做什么 我需要创建一个函数 给定一个正整数列表 可以有重复的整数 计算所有三元组 列表中 其中第三个数字是第二个数字的倍数 第二个数字是第一个数字的倍数 同一个数字不能在一个三元组中使用两次 但可以被所有其他三元组使用 例如 3 6
  • Bugzilla 如何在本地 PC 上运行?

    我已在本地系统上安装了 bugzilla 版本 3 6 3 当我点击 开设新帐户 按钮 链接并输入有效电子邮件后 我收到以下错误 从 bugzilla daemon 发送邮件到 电子邮件受保护 cdn cgi l email protect
  • 我们是否仍然受制于 Visual Studio 2013 中的安装程序项目 .vdrpoj 或 WiX?

    有没有更好的Installer项目视觉工作室2013 https en wikipedia org wiki Microsoft Visual Studio Visual Studio 2013比安装项目或WiX https en wiki
  • 使用 grep 在多个文件中查找字符串

    我有一个文件夹 里面有子文件夹 所有子文件夹都有多种类型的文件 我想在里面搜索一个单词 css 文件 我正在使用 Windows 7 并且我有grep 我如何使用grep to 找到图案并打印 如果找到模式 请提供文件名 和路径 其实你不需
  • “主要”java.lang.NoClassDefFoundError:org / apache / http / HttpEntity

    我正在尝试在我的项目中使用 apache http 库 我在我的项目中导入了库https i stack imgur com Cm9ck jpg https i stack imgur com Cm9ck jpg 当我运行我的程序时 我收到
  • 在 Razor 组件 (Blazor) 中渲染 Razor 部分视图

    我最近发现了 Blazor 并且一直在尝试一些测试项目 以更好地评估如何将其包含在未来的项目中 由于具有 MVC 背景 我从一个 MVC 项目开始 并向其中添加了 Razor 组件 并将其嵌套在标准 MVC razor 页面中 反过来可能吗
  • Windows 会清除内存页吗?

    我知道 Windows 有一个选项可以清除页面文件当它关闭时 当实际物理 虚拟内存进入或超出范围时 Windows 是否会对实际物理 虚拟内存执行任何特殊操作 例如 假设我运行应用程序 A 它将可识别的字符串写入内存中的变量 然后关闭该应用
  • 使用参数调用事件处理程序

    Visual Studio 2008 C 3 0 我有一个调用事件处理程序的方法 我想将该方法接收到的两个参数传递给事件处理程序 我想做这样的事情 wc DownloadDataCompleted wc DownloadedDataComp
  • 计算进行时显示进度条

    我正在编写代码来计算 Pi 的值 有时可能需要很长时间才能计算 我添加了一个进度条来显示进度 但代码完全按照我的指示执行 它在计算后打开进度条 然后立即关闭它 当值达到 100 时它会关闭 我试图将进度条的代码粘贴到循环中 但很快我意识到这