我正在寻找处理壳的一般做法。
主应用程序菜单单击执行以下序列
DialogHandler Class =(执行我的应用程序库GUI类)
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException {
if (dlg == null){
try {
AbstractAIFApplication app = AIFDesktop.getActiveDesktop().getCurrentApplication();
session = (TCSession) app.getSession();
TCUserService userService = session.getUserService();
AplotVersion.negotiateVersion(userService);
AplotQueryCapabilities.initialize(userService);
shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
dlg = new AplotBaseDialog(shell, session);
}
catch (Exception ex) {
MessageBox.post(HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell(), ex, true);
}
}
dlg.open();
return null;
}// end execute()
问题。当我在DialogHandler中打开Dialog时,我是否必须在该类中处理它?</ p>
while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
display.dispose();
我的GUI基类AplotBaseDialog =(扩展TitleAreaDialog)
构造函数从DialogHandler类接收Shell。
问题:我是否将While(!shell.isDisposed())代码放在此类中?
我也在AplotBaseDialog类的按钮中打开几个对话框。
private void showPDFCreateDialog() {
pdfDialog = new AplotCreatePDFDialog(this, getShell(), session);
pdfDialog.open();
pdfDialog.getShell().setSize(700, 400);
}
问题:我是否必须在每个对话框类中包含dispose代码,或者在关闭按钮代码中是否有一个dispose()足够好?
问题:这是创建和打开对话框的正确方法吗?
问题:现在,我没有在我的应用程序代码中的任何位置设置显示。
Display display = Display.getDefault();
我只是将Shell从父对话框传递给子对话框,并在需要时使用asyncExec。
Display.getDefault().asyncExec(new Runnable() {
public void run() {
}
}
问题:我是否需要在应用程序代码中的某处(!shell.isDisposed())?
答案 0 :(得分:1)
JFace Dialog
为您执行以下功能。除非你想构建自己的对话框而不是扩展JFace Dialog
//this is for keep reading events from event table
while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
display.dispose();