Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT-开孔/处理壳体-一般做法_Java_Swt_Dispose_Jface - Fatal编程技术网

Java SWT-开孔/处理壳体-一般做法

Java SWT-开孔/处理壳体-一般做法,java,swt,dispose,jface,Java,Swt,Dispose,Jface,我正在寻找处理贝壳的一般做法 主应用程序菜单单击执行以下顺序 DialogHandler类=(执行我的应用程序基本GUI类) 问题。因为我正在DialogHandler中打开对话框,所以我必须在该类中处理它吗 while(!shell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } display.dispose(); 我的GUI基类AplotBaseDialog=(扩展了Titlea

我正在寻找处理贝壳的一般做法

主应用程序菜单单击执行以下顺序

DialogHandler类=(执行我的应用程序基本GUI类)

问题。因为我正在DialogHandler中打开对话框,所以我必须在该类中处理它吗

while(!shell.isDisposed()){
    if(!display.readAndDispatch())
      display.sleep();
  }
  display.dispose();
我的GUI基类AplotBaseDialog=(扩展了TitlearReadialog)

构造函数正在从DialogHandler类接收Shell

问题:我是否将While(!shell.isDisposed())代码放在此类中

我还在AplotBaseDialog类的按钮中打开几个对话框

 private void showPDFCreateDialog() {
   pdfDialog = new AplotCreatePDFDialog(this, getShell(), session);
   pdfDialog.open();
   pdfDialog.getShell().setSize(700, 400);
 }
问题:我必须在每个对话框类中包含dispose代码,还是在close按钮代码中包含dispose()就足够了

问题:这是创建和打开对话框的正确方法吗

问题:现在,我没有在应用程序代码的任何地方设置显示

Display display = Display.getDefault();
我只是将一个Shell从父对话框传递到子对话框,并在需要时使用asyncExec

Display.getDefault().asyncExec(new Runnable() {
  public void run() {
  }
} 

问题:我的应用程序代码中需要有while(!shell.isDisposed())吗?

JFace
Dialog
为您提供以下功能。您不需要做任何事情,除非您想构建自己的对话框,而不是扩展JFace
dialog

//this is for keep reading events from event table
while(!shell.isDisposed()){
        if(!display.readAndDispatch())
          display.sleep();
      }
      display.dispose();

也就是说,您必须
关闭()
对话框,才能
Shell
成为
dispose
d。
//this is for keep reading events from event table
while(!shell.isDisposed()){
        if(!display.readAndDispatch())
          display.sleep();
      }
      display.dispose();