- 浏览: 636707 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- 生活 (2)
- c# (37)
- 技术 (3)
- 400电话 (0)
- 400常见问题 (0)
- 400资费 (0)
- html (7)
- css (0)
- 数据库 (7)
- javascript (16)
- php (33)
- asp.net mvc2 (10)
- mysql (9)
- C# 3.0 LinQ (10)
- vs2005或vs2008 (4)
- flash and as3 (7)
- fms (1)
- dedeCMS (11)
- java (33)
- j2me (1)
- swing (1)
- c++ (1)
- jquery easyui (3)
- jquery (5)
- android (29)
- MongoDB (9)
- VtigerCRM (1)
- test (0)
- linux (30)
- nutch (2)
- SqlServer数据库 (2)
- 数据检索 (2)
- java抓取 (11)
- 乐天 (1)
- 淘宝 (1)
- Silverlight4.0 (6)
- sphinx实时索引 (5)
- ecshop (9)
- codeigniter(CI) (3)
- axure6 (1)
- 京东店铺装修教程 (2)
- xpath (1)
- joomla (2)
- bpm (1)
- Bootstrap (2)
- knockout (4)
- ecstore (4)
- css3 (1)
- 微信 (2)
- dede (0)
- soa_edi (1)
- odoo (0)
- web (1)
最新评论
-
骑着蜗牛超F1:
在ie6下报了个stack overflow at line ...
兼容ie6和ie7 的16进制码流在html中显示为图片代码(base64) -
冰之海洋:
好像少了一句代码吧? FloatingFunc.show(th ...
android 一直在最前面的浮动窗口效果 -
yanzhoupuzhang:
连接有问题!
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000) -
whatable:
唉,楼主你都没有搞清楚重量级和轻量级。。。。既然引用了SWT, ...
java swing 内置浏览器打开网页显示flash图表-swt Browser应用 -
yy_owen:
我晕啊,你链接的什么内容额,我要的iis,你链接个视频什么意思 ...
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000)
这篇教程更新于2008年夏天,用来集成SWT和XULRunner来在SWT里显示一个浏览器。要想获得更多信息,请参考
http://www.eclipse.org/swt/faq.php#whatisbrowser
1,简介
这篇教程有两个目的。首先,我们能学到一些XPCOM的概念和怎么通过JavaXPCOM来在java里使用它。其次,我们学到怎么在
java程序里嵌入Firefox浏览器。
这里的例子我们开发,编译和测试的环境是Ubuntu 8.04和JDK1.6(译注,我使用的是windows xp)。我们在windows下遇到
一个问题,用户无法在form里输入文本,虽然在例子里并不需要这点。
1.1 下载资源
例子的源码在相关章节的开始以及文章的最后都有下载,当然,你也可以下载所有的代码
http://ladyr.es/wiki/attachment/wiki/XPCOMGuide/complete-guide-resources-windows.zip windows
http://ladyr.es/wiki/attachment/wiki/XPCOMGuide/complete-guide-resources-linux.zip linux
2. 安装XULRunner
JavaXPCOM是一个用来访问XULRunner里XPCOM组件和服务的java库。在这里我们介绍了一些方法通过java来使用XULRunner组件
和服务。JavaXPCOM也能在java程序里嵌入Gecko。JavaXPCOM需要Java1.4.2或者更新的版本。为了使用JavaXPCOM你需要下面的步骤
:
XULRunner:你需要安装XULRunner。它在开发中并不断变化。这个教程使用的是1.9的版本,这个版本built的时间是2008-6-19.
安装XULRunner的方法:
1. 根据自己的操作系统下载合适的安装包(译注,我在windows xp下无法使用XULRunner1.9,我使用的是
xulrunner-1.8.1.3.en-US.win32-20080128)
2.解压它,比如把它解压到c:/XULRunner
3.进入这个路径
4.卸载以前的注册
5.注册这个版本
(译注:注册并不是必须的,注册后可以在程序里不用知道XULRunner的路径,不注册也可以,不过程序里要知道路径)
javaxpcom.jar
MozillaInterface.jar
MozillaGlue.jar
3.在Java里使用JavaXPCOM
3.1 JavaXPCOM初始化
XPCOM(Mozilla Cross-platform Object Model)是一个机遇组件的架构。为了使用XPCOM,我们需要一些初始化和清理的代码。有
两种方法来使用它,请看下面注释过的代码:
首先我们可以使用initXPCOM方法
package es.ladyr.javaxpcom.test; import java.io.File; import java.io.FileNotFoundException; import java.util.Properties; import org.mozilla.xpcom.GREVersionRange; import org.mozilla.xpcom.Mozilla; public class SimplestInitializationCode { public static void main(String[] args) { // JavaXPCOM initialization GREVersionRange[] range = new GREVersionRange[1]; range[0] = new GREVersionRange("1.8", true, "1.9+", true); Properties props = null; File grePath = null; try { grePath = Mozilla.getGREPathWithProperties(range, props); } catch (FileNotFoundException e) { System.out.println("XULRunner not found. It is possible that it be wrong installed"); return; } Mozilla mozilla = Mozilla.getInstance(); mozilla.initialize(grePath); try { mozilla.initXPCOM(grePath, null); } catch (Throwable t) { System.out.println("initXPCOM failed"); t.printStackTrace(); return; } // From this line, we can use JavaXPCOM System.out.println("/n--> initialized/n"); // ... your application code ... // JavaXPOM finalization mozilla.shutdownXPCOM(null); } }
为了嵌入,你应该使用 initEmbedding 方法。这个方法需要实现 IAppFileLocProvider 的类。我们使用包http://www.my400800.cn
org.eclipse.atf.mozilla.ide.core里的一个类LocationProvider 。它的代码如下: /******************************************************************* * * Licensed Materials - Property of IBM * * AJAX Toolkit Framework 6-28-496-8128 * * (c) Copyright IBM Corp. 2006 All Rights Reserved. * * U.S. Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. * *******************************************************************/ package org.eclipse.atf.mozilla.ide.core; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import org.mozilla.xpcom.IAppFileLocProvider; public class LocationProvider implements IAppFileLocProvider { private File libXULPath; private File profile; private File history; public LocationProvider(File aBinPath, File aProfileDir) throws IOException { libXULPath = aBinPath; profile = aProfileDir; if (!libXULPath.exists() || !libXULPath.isDirectory()) { throw new FileNotFoundException("libxul directory specified is not valid: " + libXULPath.getAbsolutePath()); } if (profile != null && (!profile.exists() || !profile.isDirectory())) { throw new FileNotFoundException("profile directory specified is not valid: " + profile.getAbsolutePath()); } // create history file if (profile != null) { setupProfile(); } } private void setupProfile() throws IOException { history = new File(profile, "history.dat"); if (!history.exists()) { history.createNewFile(); } } public File getFile(String aProp, boolean[] aPersistent) { File file = null; if (aProp.equals("GreD") || aProp.equals("GreComsD")) { //$NON-NLS-1$ // file = new File(grePath); file = libXULPath; if (aProp.equals("GreComsD")) { //$NON-NLS-1$ file = new File(file, "components"); //$NON-NLS-1$ } } else if (aProp.equals("MozBinD") || //$NON-NLS-1$ aProp.equals("CurProcD") || //$NON-NLS-1$ aProp.equals("ComsD")) //$NON-NLS-1$ { file = libXULPath; if (aProp.equals("ComsD")) { //$NON-NLS-1$ file = new File(file, "components"); //$NON-NLS-1$ } } else if (aProp.equals("ProfD")) { //$NON-NLS-1$ return profile; } else if (aProp.equals("UHist")) { //$NON-NLS-1$ return history; } // else { // System.err.println("LocationProvider::getFile() => unhandled property = " + aProp); // } return file; } public File[] getFiles(String aProp) { File[] files = null; if (aProp.equals("APluginsDL")) { //$NON-NLS-1$ files = new File[1]; files[0] = new File(libXULPath, "plugins"); // } else { // System.err.println("LocationProvider::getFiles() => unhandled property = " + aProp); } return files; } }
关于更多ATF的信息,请访问http://www.eclipse.org/atf/
为了嵌入而初始JavaXPCOM的代码如下:
package es.ladyr.javaxpcom.test; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import org.eclipse.atf.mozilla.ide.core.LocationProvider; import org.mozilla.xpcom.GREVersionRange; import org.mozilla.xpcom.Mozilla; import org.mozilla.xpcom.XPCOMException; public class EmbeddingInitializationCode { public static void main(String[] args) { // JavaXPCOM initialization GREVersionRange[] range = new GREVersionRange[1]; range[0] = new GREVersionRange("1.8", true, "1.9+", true); Properties props = null; File grePath = null; try { grePath = Mozilla.getGREPathWithProperties (range, props); } catch (FileNotFoundException e) { System.out.println("XULRunner not found. It is possible that it be wrong installed"); return; } Mozilla mozilla = Mozilla.getInstance(); mozilla.initialize(grePath); LocationProvider locProvider; try { locProvider = new LocationProvider(grePath, grePath); } catch (IOException e) { System.out.println("XULRunner not found. It is possible that it be wrong installed"); return; } mozilla.initEmbedding(grePath, grePath, locProvider); // From this line, we can use JavaXPCOM System.out.println("/n--> initialized/n"); // ... your application code ... // JavaXPOM finalization try { mozilla.termEmbedding(); } catch (XPCOMException e) { // this exception is thrown if termEmbedding failed } } }
3.2 XPCOM组件和接口的基本概念
XPCOM(Mozilla Cross-platform Object Model)如它名字,是一个基于组件的架构。XPCOM的组件一般是本地实现的。XPCOM系统
里的所有组件都有一个唯一的标识。XPCOM组件实现许多接口,这些接口提供各种功能。同一个组件可能实现不同的接口,同样,一
个接口可能北不同的组件实现。因为接口必需有一个具体的实现才能使用,我们将讨论组件和接口。在后面,我们把组件看成一段实
现了一个或多个接口的代码。
在XULRunner里,接口名总是以nsI开头。在JavaXPCOM里,每个XPCOM接口都有一个对应的java接口。它们的名字以nsI开头,它们
位于org.mozilla.xpcom里,被放在MozillaInterfaces.jar包里面。这些接口的javaDoc在MozillaInterfaces-src.jar里。你可以在
https://developer.mozilla.org/En浏览所有的XPCOM接口,MDC是一个与语言无关的文档,并不是Java的。
在JavaXPCOM里没有XPCOM组件的代码。后面你将看到怎么在JavaXPCOM里初始化和使用组件。因为没有java代码,所有也没有
JavaDoc。http://developer.mozilla.org/En里包含了XPCOM组件的完整文档。
我们可以如下的步骤使用XPCOM组件:
得到组件
得到实现了我们想使用的接口的组件
调用它
组件使用URI来命名,例如,@mozilla.org/file/local;1。Mozilla的组件以@mozilla.org开头。这个URI是contractID,每个组
件也有一个组件标识符(CID)。同样,每一个接口也有一个接口标识符(IID)。IID总能使用一个static的final的属性来获取。组件可
能存在一个对象实例或者单例的服务。通常,服务包含单词Service或者Manager
3.3 使用JavaXPCOM: 与用JavaScript来使用XPCOM的不同点与相同点
在XPCOM里,所有的接口都继承了nsISupports,它有一个函数叫做QueryInterface,这个函数返回一个组件的一个接口,如果这
个组件没有实现这个接口,那么将返回异常。在JavaXPCOM里,接口nsISupports提供了QueryInterface来返回一个nsISupports对象
。为了属于谋个接口的方法,你首先需要使用QueryInterface方法确定这个接口。
比如,你可以使用下面的JavaScript来调用XPCOM来创建一个本地文件组件:
// Get the component
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
// Get the part of the component corresponding to the interface that we want to use
var aLocalFile = aFile.QueryInterface(Components.interfaces.nsILocalFile);
// Call the function (one or more than one)
aLocalFile.initWithPath("/mozilla/testfile.txt");
上面需要两行JavaScript代码来创建组件和获得接口。可以简化的代码:
// Get the component and directly the part of the component corresponding to the interface that we want to use
var aLocalFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
// Call the function (one or more than one)
aLocalFile.initWithPath("/mozilla/testfile.txt");
在JavaXPCOM里,为了得到XPCOM组件相对应的JavaXPCOM的实例,我们必须访问ComponentManager对象,这个对象允许在运行时访问
和使用。它能够通过单例类Mozilla的getComponentManager()访问。每次我们用这种方法实例化,我们创建了一个XPCOM组件。有两
种方法来创建XPCOM组件的实例:
使用组件ID(CID):
// Get the component manager
ComponentManager cm = Mozilla.getInstance().getComponentManager();
// Get the part of the component corresponding to the interface that we want to use
nsISupports obj = cm.createInstance("{6ddb050c-0d04-11d4-986e-00c04fa0cf4a}", null, nsISupports.NS_ISUPPORTS_IID);
// Get the part of the component corresponding to the interface that we want to use
nsIInputStreamChannel isc = obj.queryInterface(nsIInputStreamChannel.NS_IINPUTSTREAMCHANNEL_IID);
// Call the method (one or more than one)
System.out.println("Content-Length: " + isc.getContentLength());
我们可以简化一下:
// Get the component manager
ComponentManager cm = Mozilla.getInstance().getComponentManager();
// Get the part of the component corresponding to the interface that we want to use
nsIInputStreamChannel isc = (nsIInputStreamChannel)
cm.createInstance("{6ddb050c-0d04-11d4-986e-00c04fa0cf4a}", null,
nsIInputStreamChannel.NS_IINPUTSTREAMCHANNEL_IID);
// Call the method (one or more than one)
System.out.println("Content-Length: " + isc.getContentLength());
也可以通过contractID来访问:
// Get the component manager
ComponentManager cm = Mozilla.getInstance().getComponentManager();
// Get the part of the component corresponding to the interface that we want to use
nsISupports obj = cm.createInstanceByContractID("@ mozilla.org/file/local;1", null, nsISupports.NS_ISUPPORTS_IID);
// Get the part of the component corresponding to the interface that we want to use
nsILocalFile file = obj.queryInterface(nsILocalFile.NS_ILOCALFILE_IID);
// Call the method (one or more than one)
file.initWithPath("/home/alpgarcia/xpcom-file-test.txt");
简化形式:
// Get the component manager
ComponentManager cm = Mozilla.getInstance().getComponentManager();
// Get the part of the component corresponding to the interface that we want to use
nsILocalFile file = (nsILocalFile)cm.createInstanceByContractID("@ mozilla.org/file/local;1", null,
nsILocalFile.NS_ILOCALFILE_IID);
// Call the method (one or more than one)
file.initWithPath("/home/alpgarcia/xpcom-file-test.txt");
在JavaScript里,我们通过调用instanceOf来检查一个组件是否实现了一个接口:
var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
if (aFile instanceOf Components.interfaces.nsILocalFile){
var aLocalFile = aFile.QueryInterface(Components.interfaces.nsILocalFile);
...
}
在java里,instanceof运算符是其它的含义。在java里只能通过QueryInterface来判断。如果调用失败,那么这个组件就没有实现特
定的接口。如果我们还是用JavaScript的写法,那么就会得到不同的结果(错误的)。试试下面的代码:
package es.ladyr.javaxpcom.test; import java.io.File; import java.io.FileNotFoundException; import java.util.Properties; import org.mozilla.xpcom.GREVersionRange; import org.mozilla.xpcom.Mozilla; import org.mozilla.xpcom.XPCOMException; import org.mozilla.interfaces.nsIComponentManager; import org.mozilla.interfaces.nsILocalFile; import org.mozilla.interfaces.nsIMutableArray; import org.mozilla.interfaces.nsISupports; public class InstanceOfTest { public static void main(String[] args) { // JavaXPCOM initialization GREVersionRange[] range = new GREVersionRange[1]; range[0] = new GREVersionRange("1.8", true, "1.9+", true); Properties props = null; File grePath = null; try { grePath = Mozilla.getGREPathWithProperties(range, props); } catch (FileNotFoundException e) { System.out .println("XULRunner not found. It is possible that it be wrong installed"); return; } Mozilla mozilla = Mozilla.getInstance(); mozilla.initialize(grePath); try { mozilla.initXPCOM(grePath, null); } catch (Throwable t) { System.out.println("initXPCOM failed"); t.printStackTrace(); return; } // From this line, we can use JavaXPCOM // Get the component manager nsIComponentManager cm = Mozilla.getInstance().getComponentManager(); // We will not be able to know if that component implements a given // interface using instanceof in Java nsISupports aFile = cm .createInstanceByContractID("@mozilla.org/file/local;1", null, nsISupports.NS_ISUPPORTS_IID); if (aFile instanceof nsILocalFile) { // The execution flow never come this way because instanceof // semantics are diferent in JavaScript and Java // (nsILocalFile is a chid class of nsISupports and not // the other way round) nsILocalFile aLocalFile = (nsILocalFile) aFile .queryInterface(nsILocalFile.NS_ILOCALFILE_IID); System.out.println("This message will never be printed."); } try { nsILocalFile aLocalFile = (nsILocalFile) aFile .queryInterface(nsILocalFile.NS_ILOCALFILE_IID); // The next sentences are executed if aFile component implements // nsILocalFile interface System.out .println("nsILocalFile interface implemented by this component."); // Try to get an exception caused by a non implemented interface nsIMutableArray arr = (nsIMutableArray) aFile .queryInterface(nsIMutableArray.NS_IMUTABLEARRAY_IID); System.out.println("This message will never be printed."); } catch (XPCOMException ex) { // The next sentences are executed if aFile component don't // implement nsILocalFile interface System.err .println("Interface not supported. See the following exception: "); ex.printStackTrace(); System.err.flush(); } // The inverse case matchs with the semantics of Java instanceof // operator nsILocalFile aLocalFile = (nsILocalFile) aFile .queryInterface(nsILocalFile.NS_ILOCALFILE_IID); if (aLocalFile instanceof nsISupports) { // The next sentence will be executed System.out.println("aLocalFile instance of nsISupports"); } // JavaXPOM finalization mozilla.shutdownXPCOM(null); } }
JavaScript和Java的主要区别是,在JavaXPCOM里没有一个特定的对象与XPCOM组件对应。
另外,我们可以使用另一类组件,叫做services。前面我们说过,Service作为一个单例存在,换句话说,你只能初始化一次。
Services被用来get和set全局的数据或者对其它对象进行操作。创建Service与创建组件类似,把getInstance()改成getService()就
行了。在JavaXPCOM里,我们需要nsIServiceManager对象来初始化一个Service。然后你需要调用getService或者
getServiceByContractID来得到service组件的引用。
在JavaScript里的代码:
// get the dns service component in JavaScript
var dnsservice = Components.classes["@mozilla.org/network/dns-service;1"].getService();
dnsservice.QueryInterface(Components.interfaces.nsIDNSService);
JavaXPCOM的代码:
//Now, we will try to use a service, for example, dns service
nsIServiceManager sm = mozilla.getServiceManager();
nsIDNSService dns = (nsIDNSService) sm.getServiceByContractID(
"@mozilla.org/network/dns-service;1", nsIDNSService.NS_IDNSSERVICE_IID);
3.4 在JavaXPCOM里使用组件和Services的完整例子
在第一个例子里我们将要创建一个本地的文件并写入一些文本。
package es.ladyr.javaxpcom.test;
import java.io.File; import java.io.FileNotFoundException; import java.util.Properties; import org.mozilla.xpcom.GREVersionRange; import org.mozilla.xpcom.Mozilla; import org.mozilla.interfaces.nsIComponentManager; import org.mozilla.interfaces.nsIFileInputStream; import org.mozilla.interfaces.nsIFileOutputStream; //import org.mozilla.interfaces.nsILineInputStream; import org.mozilla.interfaces.nsILocalFile; import org.mozilla.interfaces.nsISeekableStream; import org.mozilla.interfaces.nsISupports; public class FileTest { public static void main(String[] args) { // JavaXPCOM initialization GREVersionRange[] range = new GREVersionRange[1]; range[0] = new GREVersionRange("1.8", true, "1.9+", true); Properties props = null; File grePath = null; try { grePath = Mozilla.getGREPathWithProperties(range, props); } catch (FileNotFoundException e) { System.out .println("XULRunner not found. It is possible that it be wrong installed"); return; } Mozilla mozilla = Mozilla.getInstance(); mozilla.initialize(grePath); try { mozilla.initXPCOM(grePath, null); } catch (Throwable t) { System.out.println("initXPCOM failed"); t.printStackTrace(); return; } // From this line, we can use JavaXPCOM // First, we will create an empty file // A file is a component, we use the component manager to create an // instance // of local file component nsIComponentManager cm = mozilla.getComponentManager(); // Here we create directly a component and use its nsILocalFile // interface nsILocalFile file = (nsILocalFile) cm.createInstanceByContractID( "@mozilla.org/file/local;1", null, nsILocalFile.NS_ILOCALFILE_IID); file.initWithPath("/home/sevi/xpcom-file-test.txt"); // Check file existence because if the file already exists in filesystem // and // we try to create another one with the same path, an exception will be // thrown by XPCOM // (something like "The function "create" returned an error condition // (0x80520008)") if (!file.exists()) { file.create(nsILocalFile.NORMAL_FILE_TYPE, 0600); } // We can create a stream to write the file nsIFileOutputStream os = (nsIFileOutputStream) cm .createInstanceByContractID( "@mozilla.org/network/file-output-stream;1", null, nsIFileOutputStream.NS_IFILEOUTPUTSTREAM_IID); os.init(file, nsISeekableStream.NS_SEEK_END, 0, 0); os.write("Hello World!/n", 13); os.flush(); os.close(); // And now we will use an input stream to read the file // The @mozilla.org/network/file-input-stream;1 component implements the // following interfaces: // * nsIFileInputStream // * nsIInputStream // * nsILineInputStream // * nsISeekableStream // * nsISupports // First create a parent component (top parent component). We could use // another component // implemented interface as well. nsISupports is = cm.createInstanceByContractID( "@mozilla.org/network/file-input-stream;1", null, nsISupports.NS_ISUPPORTS_IID); // We will use the file input stream interface to associate a local file // with the stream nsIFileInputStream fis = (nsIFileInputStream) is .queryInterface(nsIFileInputStream.NS_IFILEINPUTSTREAM_IID); fis.init(file, nsIFileInputStream.REOPEN_ON_REWIND, 0, 0); System.out.println("The file contains " + fis.available() + " bytes of data."); fis.close(); // JavaXPOM finalization mozilla.shutdownXPCOM(null); System.out.println("Finish!"); } }
下面是一个关于域名的例子:
package es.ladyr.javaxpcom.test; import java.io.File; import java.io.FileNotFoundException; import java.util.Properties; import org.mozilla.xpcom.GREVersionRange; import org.mozilla.xpcom.Mozilla; import org.mozilla.interfaces.*; public class ServiceTest { public static void main(String[] args) { // JavaXPCOM initialization GREVersionRange[] range = new GREVersionRange[1]; range[0] = new GREVersionRange("1.8", true, "1.9+", true); Properties props = null; File grePath = null; try { grePath = Mozilla.getGREPathWithProperties(range, props); } catch (FileNotFoundException e) { System.out .println("XULRunner not found. It is possible that it be wrong installed"); return; } Mozilla mozilla = Mozilla.getInstance(); mozilla.initialize(grePath); try { mozilla.initXPCOM(grePath, null); } catch (Throwable t) { System.out.println("initXPCOM failed"); t.printStackTrace(); return; } // From this line, we can use JavaXPCOM // Now, we will try to use a service, for instance, dns service nsIServiceManager sm = mozilla.getServiceManager(); nsIDNSService dns = (nsIDNSService) sm.getServiceByContractID( "@mozilla.org/network/dns-service;1", nsIDNSService.NS_IDNSSERVICE_IID); System.out.println("Hostname: " + dns.getMyHostName()); nsIDNSRecord dnsRecord = dns.resolve("www.google.es", nsIDNSService.RESOLVE_CANONICAL_NAME | nsIDNSService.RESOLVE_BYPASS_CACHE); System.out.println("Canonical Name: " + dnsRecord.getCanonicalName() + " -- Next Address: " + dnsRecord.getNextAddrAsString()); // JavaXPOM finalization mozilla.shutdownXPCOM(null); System.out.println("Finish!"); } }
发表评论
-
Java和C#运行命令行并获取返回值 运行bat文件
2015-08-04 10:45 1340Java运行命令行的例子 import java.io.B ... -
C#和java调用phantomjs采集ajax加载生成的网页
2015-08-04 09:58 4328日前有采集需求,当我把所有的对应页面的链接都拿到 ... -
数据结构之BloomFilter
2014-12-04 10:12 1725BloomFilter是什么? Bloo ... -
在XULRunner中获得Cookie
2012-04-20 11:22 1188最近在看browser嵌入,找到XULRunner,http: ... -
XULRunner with Java: JavaXPCOM Tutorial 5
2012-04-13 17:03 12817.3 点击Element和填写表单 我们可以安全的 ... -
XULRunner with Java: JavaXPCOM Tutorial 4
2012-04-13 17:04 13967. 用JavaXPCOM来自动浏览网页 在这一节里我 ... -
XULRunner with Java: JavaXPCOM Tutorial 3
2012-04-06 11:07 12206 加载页面的W3C DOM访问 6.1 mozdom4ja ... -
XULRunner with Java: JavaXPCOM Tutorial 2
2012-04-06 10:58 1860package es.ladyr.javaxpcom. ... -
SWT可交互式Browser控件
2012-04-06 10:55 3060在许多平台中,Browser控件皆被作为一个必需的控件给出,并 ... -
java应用程序中嵌入浏览器总结
2012-04-06 10:53 1902java应用程序中嵌套浏 ...
相关推荐
1. **manifest文件**:每个使用XULRunner的应用都需要一个`application.ini`文件,其中包含了应用的基本信息,例如版本号、主执行文件等。例如: ```ini [App] Vendor=YourCompany Name=YourAppName ID={...
该项目包含有助于破解脚本。 如何为Mer配置开发环境 用于嵌入式设备的Gecko引擎开发非常耗资源。 如果要尝试,最好有一台运行Linux的强大计算机,并避免进行虚拟化。 首先,您需要安装Mer platform SDK并输入它。...
1. **下载XULRunner**:根据你的Java应用程序和操作系统的架构,从官方或可靠的来源下载对应的XULRunner版本。 2. **设置环境变量**:为了让Java应用能够找到XULRunner,你需要设置系统环境变量,指向XULRunner的...
2. **集成到Java项目**:将XULRunner库添加到Java项目的类路径中,以便在运行时调用。 3. **编写Java代码**:使用特定的API,如XPCOM(交叉平台组件对象模型),与XULRunner进行交互,创建并控制浏览器窗口。 4. **...
《XULRunner:Firefox浏览器内核的深度解析》 XULRunner,全称为“XML User Interface Library Runner”,是Mozilla基金会开发的一个开源软件框架,用于运行使用XUL(XML User Interface Language)界面描述语言...
1. **运行时环境**:提供了XULRunner运行所需的基本组件,使得开发者可以运行和调试基于XUL的应用程序。 2. **头文件**:包含了开发XUL应用程序所需的接口定义,如XUL元素、CSS样式、JavaScript API等,这对于编写...
XULRunner 10.0.4 ESR版本提供了稳定性和安全性,而DJNativeSwing则增强了Java应用在用户界面方面的表现。对于需要在Windows环境中开发或运行使用XUL和Swing技术的Java应用的开发者来说,这是一个必不可少的资源。
1. **XULRunner**:XULRunner是Mozilla基金会开发的一个平台,它提供了运行使用XUL(XML User Interface Language)语言构建的应用程序所需的基础框架。XUL是一种标记语言,常用于创建跨平台的图形用户界面,比如...
**XULRunner 1.9.2 SDK:构建Firefox插件和GUI的基石** XULRunner是Mozilla基金会开发的一个开源框架,它为构建基于XUL(XML User Interface Language)的应用程序提供了一个运行环境。XULRunner 1.9.2是这个框架的...
1. **安装**:用户或开发者需要首先下载与目标系统兼容的XULRunner版本,然后解压缩文件,例如使用`tar -zxvf xulrunner-1.8.0.4.en-US.linux-i686.tar`命令来解压。 2. **应用配置**:开发者需要在应用程序中指定...
org.eclipse.swt.SWTError: No more handles [MOZILLA_FIVE_HOME=''] (java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-mozilla-gtk-4335 in java.library.path no swt-mozilla-gtk ...
1. **GeckoFx简介**: - GeckoFx是.NET Framework的一个组件,它实现了对Mozilla的Gecko渲染引擎的封装,使得.NET开发者可以方便地利用Gecko来解析和显示网页内容。 - 这个版本号33.09意味着它基于Firefox 33.0的...
【xulrunner-1.8.1.2pre.en-US.win32】是一个与Firefox早期版本相关的技术,它是Mozilla基金会开发的一个开源运行时环境,用于支持基于XUL(XML User Interface Language)的应用程序运行。XUL是一种XML语言,用于...
《XULRunner-win64-1.9.2.25:Java Swing的视图化展示利器》 在IT行业中,XULRunner是一款至关重要的工具,尤其对于开发者来说,它提供了一个强大的平台来运行基于XUL(XML User Interface Language)的应用程序。...
xulrunner-1.9.2-gnome-support_1.9.2.17+build3+nobinonly-0ubuntu0.8.04.1_i386
1. **跨平台支持**:XULRunner 支持多种操作系统,包括 Windows、Linux 和 macOS,使得开发者能够编写一次代码,到处运行。 2. **内置组件库**:XULRunner 包含了一整套用于处理图形、网络、存储、音频、视频等的...
1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,具有跨平台的特性,允许开发者编写一次代码,到处运行。在这个项目中,Java用于创建浏览器的后端逻辑和用户界面,展示其强大的应用程序开发能力。 2. **...
XULRunner是一个开源的软件运行环境,由Mozilla基金会开发,主要用于支持使用XUL(XML User Interface Language)构建的跨平台应用程序。XULRunner提供了一套完整的库和框架,使得开发者可以构建桌面应用,而无需...
1. **应用程序框架**:XULRunner提供了一个完整的应用程序运行时环境,包括渲染引擎、网络连接、本地文件系统访问以及硬件资源管理等功能。它为开发者提供了构建复杂应用程序的基础架构。 2. **跨平台支持**:...
1. **GeckoFX**: - **定义**: GeckoFX 是一个开源的.NET库,它为.NET开发者提供了集成Mozilla的Gecko浏览器内核的能力。Gecko是Firefox浏览器背后的核心技术,用于解析HTML、CSS、JavaScript以及处理网络请求。 -...