我有一个GUI,它在运行它的平台上构建/初始化非常繁重.因此我想在初始化时更新进度..
我有一个小的未修饰的JDialog包含一个JLabel和一个JProgressBar,我想在初始化期间在特定的地方更新,但是,因为事件调度thead(根据Swing规则)用于构建/初始化GUI,进展当然是直到EDT再次空闲(即初始化完成)才更新..
JProgressBar我已经使用"paintImmediately"重绘了,但我似乎无法让它适用于JLabel和对话框本身..是否有任何简单的推荐/证明方法来实现这一目标?
干杯...
编辑:添加一个我正在尝试做的例子; 当然,大大简化了.
private JLabel progressLabel;
private JProgressBar progressBar;
public static int main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showProgressDialog();
progressLabel.setText("construct 1");
constructSomeHeavyGUI();
progressLabel.setText("construct 2");
progressBar.setValue(33);
constructSomeMoreHeavyGUI();
progressLabel.setText("construct 3");
progressBar.setValue(67);
constructEvenMoreHeavyGUI();
progressLabel.setText("done");
progressBar.setValue(100);
hideProgressDialog();
showHeavyGUI();
}
});
}
Run Code Online (Sandbox Code Playgroud)
只要EDT忙碌,并且在我们全部完成而不是一路更新之后,由progressBar.setValue()/ progressLabel.setText()上面的呼叫引起的重新绘制当然会排队等待.
根据gnu make 文档,如果规则通过单个调用生成多个目标(例如,使用具有多个输出文件的方法执行工具的配方),您可以使用“&:”规则语法来告诉 make。使用此语法时,我收到有关目标“&”的警告,但是,当多个规则中有多个(但唯一的)目标时。好像错误地将与号作为目标名称而不是成为目标-先决条件分隔符的一部分。
在我的原始项目中,我有两个具有多个目标的规则和一个从单个 statement/tool 生成这些目标的配方。两个规则中的每一个的目标都是唯一的。我创建了以下简单示例来演示 make 生成的警告:
all: file_abbc
.PHONY: all clean
clean:
del /Q file_*
file_abbc: file_ab file_bc
copy file_ab+file_bc file_abbc
file_ab file_bc &: file_a file_b file_c
copy file_a+file_b file_ab
copy file_b+file_c file_bc
file_a file_b file_c &: content
copy content file_a
copy content file_b
copy content file_c
Run Code Online (Sandbox Code Playgroud)
在上面的 Windows 上运行 make 的警告:
Makefile:17: 警告:覆盖目标“&”的配方
Makefile:13: 警告:忽略目标“&”的旧配方
为什么 make 抱怨目标 '&' ?