-1

出于某种奇怪的原因,我需要从 servlet 打开 swt 对话框。这甚至可能吗?目前我有这个但得到“无效的线程访问错误”。到目前为止,我正在这样做。

        Thread th=new Thread(new Runnable(){

        @Override
        public void run() {
            Shell shell = new Shell();
            FileDialog dialog=new FileDialog(shell);
            dialog.setText("Enter a filename");
            dialog.setFilterPath("c:\\");
            String selected=dialog.open();
            log.error(selected);
            shell.dispose();

        }

    });
    th.start();

有任何想法吗?

4

1 回答 1

2

我不想知道奇怪的原因,同时我无法警告您在打开SWT窗口时可能遇到的问题,Servlet但问题是您正在SWT从 Native 访问小部件,Thread这将不起作用.

SWT只能在 上访问UI Thread

你也没有阻止UI Thread.

PFB 解决您问题的代码

Thread th = new Thread(new Runnable()
    {

        @Override
        public void run()
        {
            Display.getDefault().syncExec(new Runnable()
            {
                @Override
                public void run()
                {
                    Display display = Display.getDefault();
                    Shell shell = new Shell(display);
                    FileDialog dialog=new FileDialog(shell);
                    dialog.setText("Enter a filename");
                    dialog.setFilterPath("c:\\");
                    String selected=dialog.open();
                    log.error(selected);
                    while (!shell.isDisposed())
                    {
                        if (!display.readAndDispatch())
                            display.sleep();
                    }

                }

            });
        }
    });

    th.start();
于 2013-06-26T16:28:04.670 回答