JProgressBar不更新,找不到线索

2023-12-08

干得好,现在我只想知道为什么如果我在 while 循环中添加下面的 System.out.println 指令,进度会显示在 Gui 中的 cmd 和 Pgbar 上? :

while(progress < 99){ 
  System.out.println("into while of PBar Thread progress = "+progress); 
  if(progress != Path.operationProgress){ 
    operationProgressBar.setValue(progress); 
    progress = Path.operationProgress; 
    operationProgressBar.repaint(); } }

需要一些帮助,我无法更新 JProgressBar,我 无法使用 SwingWorker,我必须在没有它的情况下解决这个问题。变量 Path.operationProgress 是“Path”类中的静态变量 实例,并且它是从另一个线程更新的,所以我认为 PBar 和 Path 实例都在用户的线程中执行,而不是在 美东时间 。这是进度条的代码:

    import javax.swing.*;
    public class Pbar extends Thread {
      JProgressBar operationProgressBar;
      public Pbar(JProgressBar operationProgressBar) {
          this.operationProgressBar = operationProgressBar;
      }

      @Override
      public void run() {
          int progress = Path.operationProgress;
          while(progress < 99) {
              if(progress != Path.operationProgress) {
                  operationProgressBar.setValue(progress);
                  progress = Path.operationProgress;
                  operationProgressBar.repaint();
              }}}
     }

这是启动线程的操作:

private javax.swing.JProgressBar operationProgressBar;
private javax.swing.JLabel pathImage;
private javax.swing.JButton simulatedAnnelingButton;

public class TSPGUI extends javax.swing.JFrame {

    TSPMG tspInstance;
    Path p, result;
    String filename = "";
    int neighborHood_Type = 1, i = 0;
    // ......Constructor Stuff and init()

private void simulatedAnnelingButtonActionPerformed(java.awt.event.ActionEvent evt)

{
线程 sa = 新线程(){ @覆盖 公共无效运行(){ 结果 = p.SimulatedAnnealing(neighborHood_Type); String lastCostString = result.Cost() + ""; lastCostLabel.setText(lastCostString); }}; sa.start(); Pbar pb = new Pbar(操作进度条); pb.start(); } //其他一些东西... }


如果你不能使用SwingWorker然后使用SwingUtilities.invokeLater, e.g.:

if (progress != Path.operationProgress) {
    final int progressCopy = progress; // Probably not final so copy is needed
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        void run() {
            operationsProgressBar.setValue(progressCopy);
        }
    });
}

注意:执行此操作时,使用的所有内容run必须是最终的,或者必须有其他措施来访问变量。这段代码在这方面具有象征意义。

您需要在事件调度线程之外对 Swing 组件进行操作,没有办法解决这个问题。

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

JProgressBar不更新,找不到线索 的相关文章

随机推荐

  • 如何解决读取二进制文件时出现 EOF 错误

    class CarRecord declaring a class without other methods def init self constructor self VehicleID self Registration self
  • 我如何在 qml canvas 元素中创建弯曲文本?

    我想在 qml 中创建弯曲文本 可以吗 有没有一个我可以导入的 javascript 库来做到这一点 我的想法是 也许可以使用画布元素 但我不知道如何做到这一点 这是一个好主意 Window visible true width 640 h
  • 如何在 SwiftUI 中将包含列表的视图的背景颜色更改回白色

    我目前正在与Lists in SwiftUI Problem A 默认视图在 SwiftUI 中有一个white background Color 然而 当添加列表其背景颜色更改为systemGray6而列出单元格采取white bgCol
  • 如何将 div 与公共 CSS 样式隔离?

    我有一些代码 例如 html 中的代码 img src h1 Hi it s test h1 div img src h1 Hi it s test h1 div 如果我使用以下 css 代码来设置样式 img width 100px he
  • 尝试保存 SSRS 报告时出现奇怪的错误

    Hi I have created a report in SSRS and I have been saving changes as I was building the report now right before the end
  • 编译llvm时llvm[n]的含义,其中n是整数

    我正在编译 LLVM 以及 clang 我注意到编译的输出有llvm 1 or llvm 2 or llvm 3 每行的前缀 括号里的那些整数是什么意思 显然 它与编译作业的编号无关 可以通过 make j 1 轻松检查 基于 autoco
  • 列之间的 Bootstrap 间隙

    See http www anniestasjes nl 40 producten html category tassen我使用 Bootstrap 3 进行响应式布局 我发现产品之间存在巨大差距 因为有时产品标题占据两行 而且 div
  • 无法让硒点击按钮

    网站检查元素的图片 更多深度图片我的代码片段 from selenium import webdriver from selenium webdriver common keys import Keys import time from s
  • 在 ajax/jquery 调用的 success 函数之外使用变量

    我有以下代码 var test ajax type GET url views person controller php actor person action checkAge data age value success functi
  • WPF:实现 MediaPlayer 音频/视频搜索器

    我目前正在使用 WPF 开发 MP3 播放器 在 WPF 应用程序中 MediaPlayer基本上 我想实现一个随着当前播放的歌曲一起移动的歌曲搜索器 我已经实现了一个歌曲滑块 来自萨莎 巴伯的申请 并且当用户手动拖动导引头时它会起作用 例
  • Docker 从 ubuntu 绝对路径 COPY

    我的 dockerfile 中有以下行 COPY root url net volumes persistent url root usr share nginx html 当我尝试使用 docker compose 构建图像时 我得到了
  • SSRS 报告中没有数据

    我在 SSRS 报告上有一个 tablix 它从存储过程中获取数据 当不存在数据时 我试图向用户显示一条消息 例如 此报告没有数据 我可以通过在 NoRowsMessage 中指定此消息来轻松完成此操作Tablix 的属性 但我想显示 ta
  • html css 内容中的特殊字符,使用 attr()

    相关代码笔 http codepen io anon pen ocptF 编辑 codepen 使用 Jade 因此搞乱了一些事情 在开始这个问题时我并没有意识到这一点 本质上 我认为 CSS attr 会逐字复制 HTML 属性 但事实并
  • 2 个向量中所有点之间的欧氏距离

    如果我有两个长度为 M 和 N 的一维数组 计算所有点之间的欧几里得距离 结果为 NxM 数组 的最有效方法是什么 我正在尝试用 Numpy 解决这个问题 但我对它还很陌生 所以我有点卡住了 目前我正在这样做 def get distanc
  • 正确的 JavaScript 运算符优先级表是什么?

    如果我在 Firefox 上运行以下代码 则会收到错误消息 new Number toString But 根据MDN new Number应该先评估 所以我认为该表不正确 让我们来看看at MSDN 表格上方写着运算符是从左到右计算的 但
  • 有没有办法替换 JSON 值并同时将其设置为 '' ?

    我有一个 JSON 字段 如下所示 header C value 1 header D value 2 header E value 3 我想更改 JSON 值标头的名称并将其设置为 但我只能更改该值 UPDATE Files SET Co
  • 如何从另一个页面关闭模态表单

    document ready function create user button click function dialog form load test html dialog modal true 我有两页 从第一页开始 我想使用
  • bootstrap 3确认删除cakephp中的模式

    你好 我有一个记录表 其中每一行都有一个删除链接 你会发现 cakephp 的删除操作 public function delete id if this gt request gt is get throw new MethodNotAl
  • 对数组进行排序而不重写键

    我有一个如下所示的数组 arr 0 gt Int 2 1 gt Array 2 gt Array 3 gt Array 我已经使用 usort 对其进行排序 usort arr function a b if a prop b prop r
  • JProgressBar不更新,找不到线索

    干得好 现在我只想知道为什么如果我在 while 循环中添加下面的 System out println 指令 进度会显示在 Gui 中的 cmd 和 Pgbar 上 while progress lt 99 System out prin