线程“Thread-0”中的异常org.eclipse.swt.SWTError:XPCOM错误0x8000ffff

时间:2014-11-06 20:59:22

标签: java multithreading browser swt xulrunner

我在运行程序时遇到异常。当我使用SWT.NONE而不是SWT.MOZILLA时,它工作正常。但我需要使用SWT.MOZZILLA,因此我可以操纵浏览器设置(如代理设置)或请求标头。

Exception in thread "Thread-0" org.eclipse.swt.SWTError: XPCOM error 0x8000ffff
at org.eclipse.swt.browser.Mozilla.error(Mozilla.java:2815)
at org.eclipse.swt.browser.Mozilla.initProfile(Mozilla.java:2617)
at org.eclipse.swt.browser.Mozilla.create(Mozilla.java:770)
at org.eclipse.swt.browser.Browser.<init>(Browser.java:101)
at OrderThread.openBrowser(MultiThreadBrowser.java:34)
at OrderThread.run(MultiThreadBrowser.java:26)

这是我的程序,在这个程序中,我使用的是XULRunner版本3.6.28,32位,我下载了here。我非常感谢您对此的回应。

添加其他信息,当我在单线程中运行时,它可以正常工作。

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.ProgressAdapter;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class MultiThreadBrowser {

    public static void main(String args[]) {
        String xulrunnerDir = "C:\\xulrunner-3.6.28.en-US.win32\\xulrunner";
        System.setProperty("org.eclipse.swt.browser.XULRunnerPath", xulrunnerDir);

        for (int i = 0; i < 2; i++) {
            OrderThread ot = new OrderThread();
            ot.start();
        }
    }
}

class OrderThread extends Thread {

    boolean loaded = false;

    public void run() {
        openBrowser();
    }

    public void openBrowser() {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        Browser browser = new Browser(shell, SWT.MOZILLA);
        browser.setUrl("http://stackoverflow.com");
        shell.open();

        browser.addProgressListener(new ProgressAdapter() {
            @Override
            public void completed(ProgressEvent event) {
                if (!loaded) {
                    loaded = true;
                    event.display.timerExec(5000, new Runnable() {
                        @Override
                        public void run() {
                            System.out.println("Loaded!!!");
                            shell.close();
                        }
                    });
                }
            }
        });

        while (display.getShells().length > 0) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }

        display.dispose();
    }
}

0 个答案:

没有答案