问题描述
我有一个 Java 程序,它使用 ProcessBuilder
来设置一些服务器。
我还制作了一个 Form
,它显示一个 JProgressBar
、一个 JLabel
和一个 JTextArea
。 Progressbar 设置为不确定,因为似乎没有一种方法可以轻松计算工作量。
Label 会定期更新以向 User 显示程序当前所在的步骤,TextArea 会显示有关当前步骤的额外信息。
但是,当我开始设置时,窗口打开并没有显示任何内容。只是一个带有标题的空白窗口。 直到设置完成,或者在我调试时,它有时会在短时间内实际显示某些内容。
每次更新属性时,我都尝试将 panel.revalidate() 和 panel.repaint() 一起调用,但这并没有改变任何东西。我依稀记得有一种特定的方法可以在程序在后台执行操作时更新组件,但不记得是如何进行的,并且目前找不到任何有用的东西。
public void shutdownSystems() throws IOException,InterruptedException {
for (String ip : ipArray) {
if (isWindows) builder.command(ipmitool,ip,"ADMIN","ipmi","power","down");
loadingForm.setProgressInfo("Shutting down System " + ip);
startProcess();
loadingForm.setProgressInfo(streamGobbler.getResult());
refreshLoadingWindow();
}
}
这是一段代码,用于展示我目前正在尝试如何做到这一点。 loadingForm
指的是应该更新其组件的窗口。 startProcess();
是一个本地方法,它执行 ProcessBuilder builder
设置的命令并编译输出以将此信息添加到窗口中。最后但并非最不重要的是,我调用 refreshLoadingWindow();
基本上只是获取 loadingForm
的面板并执行 .revalidate();
和 .repaint();
让我感到困惑的主要事情是,虽然我知道更新 GUI 可能有不同的方法,但它甚至根本不显示组件。甚至在第一次打开窗户时也不行。
谁能告诉我我应该做什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)