-1

奇妙な理由で、サーブレットから 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にアクセスしていることです。 .SWTThread

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 に答える