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 包概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java变量访问权限_JAVA成员变量的
- 下一篇: java ajax 点赞功能_Ajax+