Eclipse 在JFace的TableViewer中使用MessageDialog后失去焦点

Eclipse 在JFace的TableViewer中使用MessageDialog后失去焦点,eclipse,plugins,jface,tableviewer,messagedialog,Eclipse,Plugins,Jface,Tableviewer,Messagedialog,我对MessageDialog有一个奇怪的问题。我有一个对话框,里面有一个TableViewer。我的计划是,当用户在TableViewer中选择某个内容时,它将弹出一个警告对话框。代码如下所示: contextTableViewer = new TableViewer(tableContainer, SWT.BORDER | SWT.FULL_SELECTION); contextTableViewer.addSelectionChangedListener(new ISelectionCha

我对
MessageDialog
有一个奇怪的问题。我有一个对话框,里面有一个
TableViewer
。我的计划是,当用户在
TableViewer
中选择某个内容时,它将弹出一个警告对话框。代码如下所示:

contextTableViewer = new TableViewer(tableContainer, SWT.BORDER | SWT.FULL_SELECTION);
contextTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
  public void selectionChanged(SelectionChangedEvent event) {
    ...
    if () {
       Shell pshell = Display.getCurrent().getActiveShell();
        MessageDialog.openWarning(pshell, "something", "something");
    }
    ...
  }

我的问题是,在弹出警告对话框后,我失去了焦点。例如,我需要单击“取消”按钮两次以关闭包含
TableViewer
的对话框。我尝试使用
setFocus()
将焦点设置回原来的位置,但没有成功。有什么建议吗?非常感谢

我不知道为什么会发生这种情况,我通过模拟鼠标点击对话框来解决问题。

这里可能没有什么不同,但您可以在对话框中调用
getShell()
,无需
Display.getCurrent().getActiveShell()
您的意思是在消息对话框显示时或关闭后失去焦点?谢谢,我刚刚尝试了您的方法,
getShell()
也不起作用。我还尝试了
getShell().setActive()
getShell.setFocus()
,在openWarning之后,它们在~之后不起作用。在我关闭MessageDialog之后,我需要点击“取消”按钮两次以关闭保存表格的对话框。我无法复制此对话框。检查workspace.metadata目录中的.log文件以获取任何相关消息。