最初は大きなオーバーヘッドのように見えるかもしれませんがIProgressMonitor
、タスクの進行状況を示す を使用することをお勧めします。
ユーザーは、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と呼ばれるものがあることがわかりました。見てください...