日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

xpcom java_[Mozilla] JavaXPCOM 的jar 包概述

發布時間:2024/10/8 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xpcom java_[Mozilla] JavaXPCOM 的jar 包概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在mozilla 的官方網站上發現,在xulrunner 2.0 以后,將不會對javaxpcom 進行支持。(目前,mozilla 正在尋找個人來支持javaxpcom)。

在SWT 中的browser 中,可以使用mozilla 瀏覽器,而且可以通過mozilla 得到javaxpcom 的對象,來進一步操作瀏覽器。

在SWT 中的Mozilla 類中:

public Object getWebBrowser () {

if ((browser.getStyle () & SWT.MOZILLA) == 0) return null;

if (webBrowserObject != null) return webBrowserObject;

try {

Class clazz = Class.forName ("org.mozilla.xpcom.Mozilla"); //$NON-NLS-1$

Method method = clazz.getMethod ("getInstance", new Class[0]); //$NON-NLS-1$

Object mozilla = method.invoke (null, new Object[0]);

method = clazz.getMethod ("wrapXPCOMObject", new Class[] {Long.TYPE, String.class}); //$NON-NLS-1$

webBrowserObject = method.invoke (mozilla, new Object[] {new Long (webBrowser.getAddress ()), nsIWebBrowser.NS_IWEBBROWSER_IID_STR});

/*

* The following AddRef() is needed to offset the automatic Release() that

* will be performed by JavaXPCOM when webBrowserObject is finalized.

*/

webBrowser.AddRef ();

return webBrowserObject;

} catch (ClassNotFoundException e) {

} catch (NoSuchMethodException e) {

} catch (IllegalArgumentException e) {

} catch (IllegalAccessException e) {

} catch (InvocationTargetException e) {

}

return null;

}

可以看到,這里通過java 的反射來得到org.mozilla.xpcom.Mozilla 類的。而這個類在xulrunner-sdk/lib/MozillaGlue.jar 中

在org.mozilla.xpcom.Mozilla 類中,你可以看到如下的代碼:

Class localClass1 = Class.forName("org.mozilla.xpcom.internal.MozillaImpl", true, localURLClassLoader);

this.mozilla = ((IXPCOMError)localClass1.newInstance());

Class localClass2 = Class.forName("org.mozilla.xpcom.internal.GREImpl", true, localURLClassLoader);

this.gre = ((IGRE)localClass2.newInstance());

Class localClass3 = Class.forName("org.mozilla.xpcom.internal.XPCOMImpl", true, localURLClassLoader);

this.xpcom = ((IXPCOM)localClass3.newInstance());

Class localClass4 = Class.forName("org.mozilla.xpcom.internal.JavaXPCOMMethods", true, localURLClassLoader);

this.jxutils = ((IJavaXPCOMUtils)localClass4.newInstance());

可以看到,主要是加載org.mozilla.xpcom.internal.MozillaImpl,org.mozilla.xpcom.internal.JavaXPCOMMethods 等類。而這些類就在xulrunner-sdk/bin/javaxpcom.jar 中。

在查看org.mozilla.xpcom.internal.JavaXPCOMMethods 類,就會發現其中加載:javaxpcomglue.dll

System.load(str1 + System.mapLibraryName("javaxpcomglue"));

這個javaxpcomglue.dll 在xulrunner-sdk/bin/ 中。

經過這些步驟,就可以使用javaxpcom 了。

思考:java 對象和 c/c++ 是怎么轉換的呢?就是我們這里只是用MozillaInterfaces.jar(這個jar 都是接口),這么映射到真正干活的對象上的呢?

猜測: 這里,我們應該查看MozillaGlue.jar 中的IJavaXPCOMUtils 接口:

public abstract interface IJavaXPCOMUtils

{

public abstract long wrapJavaObject(Object paramObject, String paramString);

public abstract Object wrapXPCOMObject(long paramLong, String paramString);

}

在這個接口中,完成類對象和本地方法的映射。你調用接口,就能干活了。

總結: 綜上所述,xulrunner 中關于javaxpcom 的jar/dll 應該包括:MozillaInterfaces.jar,MozillaGlue.jar,javaxpcom.jar,javaxpcomglue.dll。其中MozillaInterfaces 提供API 接口。要是xulrunner 不在提供javaxpcom 的支持,那么這些包應該不會在2.0的版本中出現了。

總結

以上是生活随笔為你收集整理的xpcom java_[Mozilla] JavaXPCOM 的jar 包概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。