Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 在eclipse插件中使用SWT_Java_Eclipse_Eclipse Plugin_Swt - Fatal编程技术网

Java 在eclipse插件中使用SWT

Java 在eclipse插件中使用SWT,java,eclipse,eclipse-plugin,swt,Java,Eclipse,Eclipse Plugin,Swt,我正在尝试使用SWT在eclipse插件中创建对话框。我可以创建一个Shell和一个Display对象,代码编译时没有问题,但在调试插件时我看不到任何类型的对话框,尽管在独立应用程序中使用相同的代码时运行得很好 下面是我在实现IWorkbenchWindowActionDelegate的SampleAction的run方法中编写的示例代码 Display display = new Display(); Shell shell = new Shell(display); shell.open()

我正在尝试使用SWT在eclipse插件中创建对话框。我可以创建一个Shell和一个Display对象,代码编译时没有问题,但在调试插件时我看不到任何类型的对话框,尽管在独立应用程序中使用相同的代码时运行得很好

下面是我在实现IWorkbenchWindowActionDelegate的SampleAction的run方法中编写的示例代码

Display display = new Display();
Shell shell = new Shell(display);
shell.open();


while(!shell.isDisposed())
{
    if(!display.readAndDispatch())
    {
        display.sleep();
    }
}

display.dispose();
我还尝试删除readAndDispatch并编写了此代码,但仍然无法运行。。我什么也没看见

    Display display = new Display();
    Shell shell = new Shell(display);
    shell.open();
    MessageDialog dialog = new MessageDialog(shell, "My Title", null,
            "My message", MessageDialog.ERROR, new String[] { "First",
          "Second", "Third" }, 0);
    int result = dialog.open();

这就行了。无需事先打开新外壳。只需将新Shell传递到
消息对话框

MessageDialog dialog = new MessageDialog(new Shell(), "My Title", null,
        "My message", MessageDialog.ERROR, new String[] { "First",
      "Second", "Third" }, 0);
int result = dialog.open();

您还可以使用当前所在GUI部件的父shell,并将其传递到对话框。

这将完成此工作。无需事先打开新外壳。只需将新Shell传递到
消息对话框

MessageDialog dialog = new MessageDialog(new Shell(), "My Title", null,
        "My message", MessageDialog.ERROR, new String[] { "First",
      "Second", "Third" }, 0);
int result = dialog.open();

您还可以使用当前所在GUI部件的
parentShell
,并将其传递给对话框。

请注意,使用新的shell作为模式对话框的父级可能会给用户带来不便,因为对话框可能位于主工作台窗口后面,因此用户既看不到对话框,也无法在主工作台中执行任何操作工作台窗口。解决方案是将WindowShell作为父对象传递给对话框。由于您的操作是一个IWorkbenchWindowActionDelegate,您应该记录传递给init方法的窗口,然后使用window.getShell()获取父shell


请注意,在编写插件时,不应创建显示或运行事件队列(即readAndDispatch)(除非您需要非模式对话框,这是一个单独的主题).

请注意,使用新shell作为模式对话框的父级可能会给用户带来不便,因为对话框可能位于主工作台窗口的后面,因此用户既看不到对话框,也无法在主工作台窗口中执行任何操作。解决方案是将WindowShell作为父对象传递给对话框。由于您的操作是一个IWorkbenchWindowActionDelegate,您应该记录传递给init方法的窗口,然后使用window.getShell()获取父shell


请注意,在编写插件时,不应创建显示或运行事件队列(即readAndDispatch)(除非您需要一个非模态对话框,这是一个单独的主题)。

信息不足;试着发布一些不符合预期的代码。@E-Riz好的,我添加了一些示例代码,去掉你睡觉、阅读和发送的部分。这只适用于您自己的独立应用程序。@我尝试了上面的代码(请参见编辑),但仍然不起作用。如果您使用的是插件,请停止创建您自己的显示。尝试创建并显示对话框。信息不足;试着发布一些不符合预期的代码。@E-Riz好的,我添加了一些示例代码,去掉你睡觉、阅读和发送的部分。这只适用于您自己的独立应用程序。@我尝试了上面的代码(请参见编辑),但仍然不起作用。如果您使用的是插件,请停止创建您自己的显示。尝试创建并显示对话框。