`

发现Mozilla的东西问题出的都很诡异

阅读更多

Mozilla的东西文档比较少,并且出现问题都很诡异,在网上能搜出来的答案很少。今天又遇到一个很诡异的问题。在普通的应用程序中使用:

nsIWebNavigation webNavigation = (nsIWebNavigation) webBrowser
              .queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
    if (webNavigation == null)
      error(Mozilla.NS_ERROR_NO_INTERFACE);

    webNavigation.loadURI(url, nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
 

没有问题,

但是把应用程序部署到Tomcat上面,第一个请求loadURI会成功,以后的请求都会失败:

org.eclipse.swt.SWTException: Failed to execute runnable (org.mozilla.xpcom.XPCOMException: The function "loadURI" returned an error condition (0x80040111)
 

在 

http://markmail.org/message/c4gbufihj2oid6db#query:org.mozilla.xpcom.XPCOMException%3A%20The%20function%20loadURI%20returned%20an%20error%20condition%20(0x80040111)+page:1+mid:c4gbufihj2oid6db+state:results
 

有一个类似的问题。但没有人回复。

分享到:
评论
1 楼 fuliang 2008-11-04  
package com.ibm.scissorhands.runtime.feeds.impl;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import com.ibm.scissorhands.swt.browser.MozillaBrowser;

public class TestMozillaBrowser {
	Display display;
	Shell shell;
	MozillaBrowser browser;

	public TestMozillaBrowser() {
		this(new Display());
	}

	TestMozillaBrowser(Display display) {
		this.display = display;
		shell = new Shell(display);
		shell.setLayout(new FillLayout());
		browser = new MozillaBrowser(shell, SWT.NONE);
	}

	public TestMozillaBrowser(String url) {
		this();
		setURL(url);
	}

	private void setURL(final String url) {
		try {
			System.out.println("Set URL: " + url);
			browser.setUrl(url);
		} catch (RuntimeException err) {
			display.dispose();
			throw err;
		}
	}

	private synchronized void start() {
		shell.open();
		try {
			while (!shell.isDisposed()) {
				if (!display.readAndDispatch()) {
					display.sleep();
				}
			}
		} catch (Exception err) {
			err.printStackTrace();
		} finally {
			display.dispose();
		}
	}

	
	 static class TestThread extends Thread{
		 TestMozillaBrowser xulRunner = null;
		@Override
		public void run() {
			try {
				xulRunner = new TestMozillaBrowser("www.google.com");
				xulRunner.start();
			} catch (RuntimeException err) {
				System.err.println("ERROR: Open URL failed.");
				throw err;
			}
		}
		
		public void disposeUI(){
			Display.getDefault().syncExec(new Thread(){
				@Override
				public void run() {
					xulRunner.shell.dispose();
				}
			});
		}
	}
	
	public static void main(String[] args)throws Exception {
		TestThread[] threads = new TestThread[2];
	    threads[0] = new TestThread();
		threads[0].start();
		Thread.currentThread().sleep(2000);//wait for the shell constructed
		threads[0].disposeUI();//Do dispose the UI,the browser will be disposed when receive the SWT.Dispose Event
		
		threads[1] = new TestThread();
		threads[1].start();
		Thread.currentThread().sleep(2000);
		threads[1].disposeUI();
	}
}

上面的代码可以重现这个异常。
swt中多个Display,很容易出现问题,因为一个Display就是一个UI线程,一个UI事件的dispather,只有在确保syncExec使用正确的display,分发到正确的UI线程上才能得到正确的结果,因此swt通常只有一个Display,虽然在windows上已经支持多个Display(Linux尚未支持),上面的问题,在保证整个应用程序只有一个Display的情况下可以解决。

相关推荐

    mozilla书和开发手册

    总的来说,这个压缩包对于那些想要深入Mozilla平台开发,无论是为了创建Firefox扩展、开发基于Mozilla的应用程序,还是改进Thunderbird功能的开发者来说,都是非常宝贵的资源。通过学习这两个资料,开发者不仅可以...

    mozilla_源码编译简介

    推荐从 Mozilla 的 CVS 仓库中获取最新的源码,这样可以方便地更新代码而无需每次都重新下载。以下是下载源码的具体步骤: 1. **获取 client.mk 文件**: ```bash cvs -d:pserver:anonymous@cvs-mirror.mozilla....

    org.mozilla.javascript-1.7.2.jar

    《深入解析org.mozilla.javascript-1.7.2.jar》 在Java开发中,JavaScript引擎的使用日益广泛,其中Mozilla的Rhino引擎是备受开发者青睐的一款。本文将围绕"org.mozilla.javascript-1.7.2.jar"这个资源包,详细讲解...

    org.mozilla.javascript-1.7.2.jar.zip

    《深入解析Mozilla JavaScript引擎:org.mozilla.javascript-1.7.2.jar.zip详解》 JavaScript,作为互联网上最广泛使用的脚本语言,其在Web开发中的地位不可动摇。而Mozilla的JavaScript实现,以其强大的功能和良好...

    org.mozilla.universalchardet.jar

    org.mozilla.universalchardet.jar org.mozilla.universalchardet.jar

    mozilla help.rar

    总的来说,Mozilla Firefox的开发者文档是一份非常重要的资源,无论你是Web开发者还是Firefox扩展开发者,都应该对其有所了解。这份"mozilla help.rar"压缩包提供了一个方便的途径,让你无需上网就能获取这些宝贵的...

    基于 Mozilla 的扩展开发

    在 Mozilla 扩展中,XUL 用于定义扩展的界面元素,如工具栏、弹出窗口等。 - **JavaScript**: JavaScript 是 Mozilla 扩展的主要编程语言,用于处理逻辑和交互。它可以访问 XPCOM 组件,实现与系统和浏览器的深度...

    Mozilla Developer Center 离线版 电子书

    本电子书为MDC(Mozilla Developer Center)http://developer.mozilla.org/的离线浏览版,共收录网页计4143页,包括AJAX,CSS,DOM,HTML,Javascript,NSS,RDF,RSS,SVG,XBL,XForms,XML,XML Web Services,...

    Mozilla Rhino 介绍

    ### Mozilla Rhino 介绍 #### 开源的Java解析JavaScript引擎概览 **Mozilla Rhino** 是一款用Java语言编写的开源JavaScript引擎。它不仅能够解析和执行JavaScript脚本,而且还可以作为Java程序的一部分,允许...

    mozilla检测网页编码的jar包

    标题中的“mozilla检测网页编码的jar包”实际上指的是Mozilla开源项目中的一个子模块,用于识别网页的字符编码。这个jar包并非来自Mozilla浏览器的核心代码,而可能是Mozilla Foundation或相关的开源社区开发的一个...

    IE和Mozilla兼容性汇总

    IE和Mozilla兼容性汇总

    Mozilla Firefox V3.5.4

    Mozilla Firefox V3.5.4,若需要最新版本,请去mozilla官方网站:http://www.mozilla.com/en-US/

    通过MOZILLA的javascript引擎(SpiderMonkey)执行js代码

    Mozilla的SpiderMonkey是第一个JavaScript引擎,由Mozilla基金会开发,用于支持Firefox浏览器和其他Mozilla相关项目。这个引擎实现了ECMAScript标准,使得JavaScript代码能够被高效地解析和执行。 SpiderMonkey的...

    前端开源库-mozilla-toolkit-versioning

    "mozilla-toolkit-versioning" 是一个专为处理Mozilla工具包版本控制的开源库,它专注于解析Mozilla工具包版本格式。这个库的重要性在于,它帮助开发者准确理解和操作与Mozilla相关的项目版本信息,从而确保软件的...

    mozilla内核压缩包

    Mozilla内核支持多种语言和字符集,包括对右向左语言的全面支持,使得全球用户都能无障碍使用。 **10. 开发者工具** Mozilla内核为开发者提供了丰富的调试工具,如Firefox Developer Tools,帮助他们检查和修改网页...

    mozilla xbl基本用法示例

    Mozilla XBL(XML Binding Language)是一种强大的技术,用于在Firefox和其他基于Gecko的浏览器中创建可重用的用户界面组件。XBL允许开发者通过XML来定义元素的外观和行为,结合了XHTML、CSS和JavaScript的功能,...

    MozillaOpennews静态网站mozilla-opennews.zip

    mozilla-opennews 是支持 Mozilla Opennews 项目的静态网站。...它旨在生产出能解决新闻界存在的问题的下一代 Web 解决方案。它能支持社区的开发者和新闻工作者共同学习共同创造。 标签:mozilla

    moz-git-tools:Mozilla上使用Git的工具

    Mozilla上使用Git的工具。 为了进行此设置,请将此存储库克隆到某个地方,运行git submodule init ,然后运行git submodule init git submodule update命令,然后将您的克隆添加到$ PATH中。 有些命令需要python2 。...

    Readabilityjs一个mozilla的网页主体内容解析库

    这个库的出现是为了解决现代网页设计中常常出现的问题:过多的广告、装饰元素以及不清晰的文章布局,这些都可能使用户在阅读时分心。Readability.js的目标是提供一种解决方案,帮助开发者快速地获取页面的核心内容,...

    论文研究-Mozilla缺陷报告仓库特征分析 .pdf

    研究发现在Mozilla主要产品的新版本发布后,新的缺陷报告会有所激增。此外,严重等级较高的缺陷报告往往能在相对较短的时间内得到解决。 4. 开源软件缺陷报告的特征分析: 文章通过分析Mozilla缺陷报告仓库的现状...

Global site tag (gtag.js) - Google Analytics