一开始它可能看起来像一个很大的开销,但我建议使用IProgressMonitor
显示任务进度的 an 。
当他/她看到一个进度条时,用户会知道发生了什么,而不是一个看起来像 gui 被冻结的对话框。
这是 Eclipse 关于如何正确使用进度监视器的文章。
如果您真的想实现您的想法(我不建议这样做),您可以尝试以下方法:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
BazMessageDialog dialog = new BazMessageDialog(shell, "Information", null, "Getting List From Server", MessageDialog.INFORMATION, new String[]{"OK", "Cancel"}, 0);
dialog.open();
/* Do your stuff */
dialog.reallyClose();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static class BazMessageDialog extends MessageDialog
{
public BazMessageDialog(Shell parentShell, String dialogTitle,
Image dialogTitleImage, String dialogMessage,
int dialogImageType, String[] dialogButtonLabels,
int defaultIndex) {
super(parentShell, dialogTitle, dialogTitleImage, dialogMessage,
dialogImageType, dialogButtonLabels, defaultIndex);
setBlockOnOpen(false);
}
public void reallyClose()
{
cancelPressed();
}
}
但是,这不会阻止您剩余的 gui,因此用户将能够同时使用它。
编辑:
刚刚发现,Opal有一个叫做InfiniteProgressPanel的东西,它可能适合你。看一看...