Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
如何让workbench窗口在基于Eclipse的项目中打开模式对话框?_Eclipse_Eclipse Plugin_Eclipse Rcp_Eclipse Pde - Fatal编程技术网

如何让workbench窗口在基于Eclipse的项目中打开模式对话框?

如何让workbench窗口在基于Eclipse的项目中打开模式对话框?,eclipse,eclipse-plugin,eclipse-rcp,eclipse-pde,Eclipse,Eclipse Plugin,Eclipse Rcp,Eclipse Pde,为了打开模式对话框,您需要传递一个父窗口,并传递必要的标志,使对话框成为模式对话框 根据您在eclipse基础设施中的位置,查找此父窗口并不总是容易的 如何访问父窗口?从视图或编辑器(这部分很简单): 从其他位置访问视图或编辑器,同上 如果您发现自己身处一个无法访问视图或编辑器的类中,您可能不想调用任何UI代码,但如果您真的想自食其果: PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() 不完全是您想要做的,但您可能需

为了打开模式对话框,您需要传递一个父窗口,并传递必要的标志,使对话框成为模式对话框

根据您在eclipse基础设施中的位置,查找此父窗口并不总是容易的

如何访问父窗口?

从视图或编辑器(这部分很简单):

从其他位置访问视图或编辑器,同上

如果您发现自己身处一个无法访问视图或编辑器的类中,您可能不想调用任何UI代码,但如果您真的想自食其果:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()

不完全是您想要做的,但您可能需要在创建对话框时使用SWT.APPLICATION\u MODALSWT.DIALOG\u TRIM等,以使其成为模态对话框(但可能这不是您的问题所在)


有关更多信息,请参阅此部分。

上一个答案中的代码将起作用。但是,请记住,您只能从UI线程打开对话框。如果从不同线程(例如后台进程)打开对话框,则需要执行以下操作:

PlatformUI.getWorkbench().getDisplay().asyncExec(新的Runnable()){
公开募捐{
Shell activeShell=PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
}
});

否则,在创建对话框时会出现异常。

是的,也是这样。但我的问题更具体地说是关于查找工作台窗口的外壳。6个月前我就这么做了,但当时我已经忘记了,所以我想我应该在这本书中添加一些知识stackoverflow@Tirno-我对StackOverflow的最高票答案只是我为自己写的便条,我知道几个月或几年后,当我再次遇到完全相同的问题时,我会通过谷歌找到这些便条。当然,我应该加上这些。这更像是一个问题——您必须知道在哪里可以找到“getWorkbench()”函数。
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()