如何解决Java Swing GUI 在运行时不显示内容进程
我有一个 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 举报,一经查实,本站将立刻删除。