我在运行程序时遇到异常。当我使用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();
}
}