我在 JFrame 中构建了一个 UI。其中一个按钮启动了一个长时间运行的调用(仍在同一个 java 进程中),并且在它执行期间,UI 被冻结。
我想,为了清楚地表明事情仍在运行,我可以显示一个进度条,也许在一个弹出窗口中,以便用户可以随时了解程序正在做什么。
所以我正在创建一个新的 JDialog,向它添加一个 JProgressBar,并在事情发生时对其进行更新。问题是该对话框的内容没有得到更新。我对其标题所做的更改会立即显示,我输出到控制台的任何内容都会立即显示,但 UI 本身没有任何内容。
有没有我可以发出强制重绘的命令?
这是本节的核心:
killWindow = new JDialog();
killWindow.setUndecorated(true);
killWindow.setTitle("stopping tests - 0 of " + numActive);
killProgress = new JProgressBar(0, numActive);
killWindow.add(killProgress);
killProgress.setStringPainted(true);
killWindow.pack();
killWindow.setLocationRelativeTo(frame);
killWindow.setVisible(true);
然后,随着我们的进步......:
killProgress.setValue(++killedTests); // not seen!
killProgress.setString("Killing test on " + nickname()); // not seen!
log("Killed another test, " + killedTests + " so far"); // visible in real time
killWindow.setTitle("stopping tests - " + killedTests +
" of " + killProgress.getMaximum()); // visible in real time
我错过了什么?我尝试在 SO 上搜索和搜索,并没有真正看到任何明显的东西?