From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../javaxpcom/development/index.html | 24 ++++ .../index.html | 156 +++++++++++++++++++++ .../javaxpcom/examples/index.html | 13 ++ .../xpcom/language_bindings/javaxpcom/index.html | 73 ++++++++++ .../javaxpcom/other_resources/index.html | 15 ++ 5 files changed, 281 insertions(+) create mode 100644 files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/development/index.html create mode 100644 files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/embedding_mozilla_in_a_java_application_using_javaxpcom/index.html create mode 100644 files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/examples/index.html create mode 100644 files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/index.html create mode 100644 files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/other_resources/index.html (limited to 'files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom') diff --git a/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/development/index.html b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/development/index.html new file mode 100644 index 0000000000..6d9b1ca50b --- /dev/null +++ b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/development/index.html @@ -0,0 +1,24 @@ +--- +title: Development +slug: Mozilla/Tech/XPCOM/Language_Bindings/JavaXPCOM/Development +tags: + - JavaXPCOM + - 'XPCOM:Language Bindings' +translation_of: Mozilla/Tech/XPCOM/Language_bindings/JavaXPCOM/Development +--- +

+

+

ソース

+

最新のソースコードは、Mozilla trunk上の {{ Source("extensions/java/xpcom") }} ディレクトリ内にあります。 +

+

構築手順

+

ビルドの手順はここにあります: Building JavaXPCOM。 +

+

バグ

+

すべての JavaXPCOM バグは、 Bugzilla内で、"Core" プロダクトと "Java to XPCOM Bridge" コンポーネントを使って記録されています。 +

+ +{{ languages( { "en": "en/JavaXPCOM/Development", "zh-cn": "cn/JavaXPCOM/\u5f00\u53d1" } ) }} diff --git a/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/embedding_mozilla_in_a_java_application_using_javaxpcom/index.html b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/embedding_mozilla_in_a_java_application_using_javaxpcom/index.html new file mode 100644 index 0000000000..d523b94ce1 --- /dev/null +++ b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/embedding_mozilla_in_a_java_application_using_javaxpcom/index.html @@ -0,0 +1,156 @@ +--- +title: Embedding Mozilla in a Java Application using JavaXPCOM +slug: >- + Mozilla/Tech/XPCOM/Language_Bindings/JavaXPCOM/Embedding_Mozilla_in_a_Java_Application_using_JavaXPCOM +tags: + - Embedding Mozilla + - JavaXPCOM + - 'XPCOM:Language Bindings' +translation_of: Archive/Mozilla/Embedding_Mozilla_in_a_Java_Application_using_JavaXPCOM +--- +

+

XULRunnerにはJavaXPCOMが標準搭載されており、これは、JavaのコードとXPCOMの相互利用を可能にするものです。この記事で示すとおり、JavaでのXPCOMオブジェクトの操作は、C++の場合とそれほど大きな差はありません。 +

+

必要な環境

+ +

組み込み

+

Mozilla を Java アプリケーションに埋め込むためには、<tt>xulrunner/sdk/lib</tt>フォルダーにある<tt>MozillaInterfaces.jar</tt>というライブラリをclasspathに追加する必要があります。このライブラリは Mozilla をブートストラップし、XPCOM メソッドを呼び出すために必要なインターフェースを提供します。 +

組み込みを開始するために、Mozilla共有クラスの提供するメソッドを使用します。はじめに、Java アプリケーションは適切な XULRunner installationを見つける必要があります。 +

+
 Mozilla mozilla = Mozilla.getInstance();
+ GREVersionRange[] range = new GREVersionRange[1];
+ range[0] = new GREVersionRange("1.8.0", true, "1.9", false);
+   // work with trunk nightly version 1.9a1  ^^
+
+ try {
+   File grePath = Mozilla.getGREPathWithProperties(range, null);
+   LocationProvider locProvider = new LocationProvider(grePath);
+   mozilla.initEmbedding(grePath, grePath, locProvider);
+ } catch (FileNotFoundException e) {
+   // この例外は greGREPathWithProperties が GRE を見つけられなかったときに送出されます
+ } catch (XPCOMException e) {
+   // この例外は initEmbedding が失敗したときに送出されます
+ }
+
+

LocationProviderはJavaアプリケーションによって提供されるクラスです。これはインターフェースIAppFileLocProviderを実装しているもので、 +and tells XPCOM where to find certain files and directories. +

initEmbeddingメソッドは embedding process を開始するもので、Java アプリケーションと XPCOM や Mozilla の連携を可能にするものです。ひとたび Java アプリケーションが Mozilla を使う作業を終えたとき、それは embedding process を terminate する必要があります。 +

+
 try {
+   mozilla.termEmbedding();
+ } catch (XPCOMException e) {
+   // この例外は termEmbedding が失敗したときに送出されます
+ }
+
+

XPCOMオブジェクトを利用する

+

Mozilla が組み込まれると、Java アプリケーションは XPCOM オブジェクトを利用することができるようになります。Mozilla クラスはこれの手助けをするメソッドを提供しており、たとえば、getServiceManagergetComponentManagernewLocalFileがあります。JavaXPCOM により、 Java アプリケーションがXPCOM オブジェクトを取得し、メソッドを呼び出すのに加え、Java クラスオブジェクトを XPCOM メソッドに渡すことも可能になります。 +

例えば: +

+
 Mozilla mozilla = Mozilla.getInstance();
+ WindowCreator creator = new WindowCreator();  // nsIWindowCreator を実装
+
+ nsIServiceManager serviceManager = mozilla.getServiceManager();
+
+ nsIWindowWatcher windowWatcher = (nsIWindowWatcher) serviceManager
+   .getServiceManagerByContractID(NS_WINDOWWATCHER_CONTRACTID,
+     nsIWindowWatcher.NS_IWINDOWWATCHER_IID);
+ windowWatcher.setWindowCreator(creator);
+
+

この例では、nsIWindowCreatorインターフェースを実装した Java のクラスであるWindowCreatorが存在し、それを Mozilla に登録しようとしています。そのために、まず service manager を取得するのですが、それは Mozilla のwindow watcherのリファレンスにある方法によります。 +

別の例: (rayh.co.ukにあるもの) +

+
     // linux 上ではこのコードが実行されるより前に gtk が初期化されている必要があることに注意
+     Mozilla moz = Mozilla.getInstance();
+
+     // 次に XUL アプリケーションを実行するために、XPCOMのservice managerのインスタンスを取得する必要がある
+     nsIServiceManager serviceManager = moz.getServiceManager();
+
+     // 次に @mozilla.org/toolkit/app-startup;1 サービスを取得する必要がある
+     nsIAppStartup appStartup = (nsIAppStartup)serviceManager.getServiceByContractID("@mozilla.org/toolkit/app-startup;1", nsIAppStartup.NS_IAPPSTARTUP_IID);
+
+     // 上のものへの nsIWindowWatcher インターフェースを取得する
+     nsIWindowCreator windowCreator = (nsIWindowCreator)appStartup.queryInterface(nsIWindowCreator.NS_IWINDOWCREATOR_IID);
+
+     // window watcher サービスを取得する
+     nsIWindowWatcher windowWatcher = (nsIWindowWatcher)serviceManager.getServiceByContractID("@mozilla.org/embedcomp/window-watcher;1", nsIWindowWatcher.NS_IWINDOWWATCHER_IID);
+
+     // window creator をsetする (from step 6)
+     windowWatcher.setWindowCreator(windowCreator);
+
+     // Create the root XUL window を作成:
+     nsIDOMWindow win = windowWatcher.openWindow(null, "chrome://your-app/content/window.xul", "mywindow", "chrome,resizable,centerscreen", null);
+
+     // これを active window にする
+     windowWatcher.setActiveWindow(win);
+
+     // application を xpcom/xul に手渡し、ここでブロックする:
+     appStartup.run();
+
+

これは動作する LocationProvider の例です : +

+
       public class LocationProvider implements IAppFileLocProvider {
+
+
       private final File libXULPath;
+       int counter = 0;
+
+       public LocationProvider(File grePath) {
+       this.libXULPath = grePath;
+       }
+
+
       public File getFile(String aProp, boolean[] aPersistent) {
+       File file = null;
+       if (aProp.equals("GreD") || aProp.equals("GreComsD")) {
+           file = libXULPath;
+           if (aProp.equals("GreComsD")) {
+               file = new File(file, "components");
+           }
+       }
+       else if (aProp.equals("MozBinD") ||
+                aProp.equals("CurProcD") ||
+                aProp.equals("ComsD") ||
+                aProp.equals("ProfD"))
+           {
+               file = libXULPath;
+               if (aProp.equals("ComsD")) {
+                   file = new File(file, "components");
+               }
+           }
+       return file;
+   }
+
+
   public File[] getFiles(String aProp) {
+       File[] files = null;
+       if (aProp.equals("APluginsDL")) {
+           files = new File[1];
+           files[0] = new File(libXULPath, "plugins");
+       }
+       return files;
+   }
+
+


+

+

XPCOM の UI を別のスレッドから呼び出す

+

appStartup.run() はメインのイベントループを始動し、アプリケーションが終了するまでそこに留まります。これ以降の場所で XPCOM とcommunicateするためには、nsIProxyObjectManager を使用する必要があります。 +

上の例に引き続き新しいウインドウを作成するためには、このようにします : +

+
 // まず、event queue service を取得します。これは、XPCOM の全てのイベントキューを処理するものです。
+ nsIEventQueueService eventQueueServive = (nsIEventQueueService)serviceManager.getServiceByContractID("@mozilla.org/event-queue-service;1",nsIEventQueueService.NS_IEVENTQUEUESERVICE_IID);
+
+ // 次に、ウインドウを開くために、UI スレッドを取得します。
+ // nsIEventQueueService が所有するstatic変数がUIイベント用の特別なキューを所有しています。
+ nsIEventQueue eventQueue = eventQueueServive.getSpecialEventQueue(nsIEventQueueService.UI_THREAD_EVENT_QUEUE);
+
+ // 次に、proxy object manager 用の proxy を作成します。
+ nsIProxyObjectManager proxy = (nsIProxyObjectManager)componentManager.createInstanceByContractID("@mozilla.org/xpcomproxy;1",null,nsIProxyObjectManager.NS_IPROXYOBJECTMANAGER_IID);
+
+ // そして、proxy object manager を使って、さきほど作成した nsIWindowWatcher のインスタンスへの proxy を作成します。
+ nsIWindowWatcher windowProxy = (nsIWindowWatcher)proxy.getProxyForObject(eventQueue,windowWatcher.NS_IWINDOWWATCHER_IID,windowWatcher,nsIProxyObjectManager.INVOKE_SYNC);
+
+ // そうすれば、proxy を使ってメソッドを普通に呼び出すことができます。
+ windowProxy.openWindow(null, chromeUri, name, "centerscreen", null);
+
+

さらに詳しい情報は、XulPlanet's documentation of nsIProxyObjectManagerを参照してください。 +

これは、Injecting Events onto XPCOM’s UI Threadからとられたものです。 +

diff --git a/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/examples/index.html b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/examples/index.html new file mode 100644 index 0000000000..9c34d27c84 --- /dev/null +++ b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/examples/index.html @@ -0,0 +1,13 @@ +--- +title: Examples +slug: Mozilla/Tech/XPCOM/Language_Bindings/JavaXPCOM/Examples +tags: + - JavaXPCOM + - 'XPCOM:Language Bindings' +translation_of: Mozilla/Tech/XPCOM/Language_bindings/JavaXPCOM/Examples +--- +

+

いくつかの Java テストアプリケーションがソースツリーにチェックインされています。ここには、Java から Gecko の埋め込みや XPCOM の初期化をする方法の例があります。mozilla/extensions/java/xpcom/tests +

+
+
diff --git a/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/index.html b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/index.html new file mode 100644 index 0000000000..c2707f8de0 --- /dev/null +++ b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/index.html @@ -0,0 +1,73 @@ +--- +title: JavaXPCOM +slug: Mozilla/Tech/XPCOM/Language_Bindings/JavaXPCOM +tags: + - JavaXPCOM + - 'XPCOM:Language Bindings' + - 要更新 +translation_of: Mozilla/Tech/XPCOM/Language_bindings/JavaXPCOM +--- +

 

+
+

JavaXPCOM は Java と XPCOM のコミュニケーションを可能にします。つまり、Java アプリケーションは、XPCOM オブジェクトにアクセスでき、XPCOM オブジェクトも XPCOM インターフェースを実装するすべての Java class にアクセスできます。 JavaXPCOM を使うことで、開発者は Java アプリケーションから XPCOM や埋め込み Gecko にデータを伝送することができます。 JavaXPCOM は XPConnect (JavaScript-XPCOM ブリッジ) に非常によく似ていて XPIDL を使用します。

+

JavaXPCOM は XULRunner の一部として標準で構築されています。 最近のビルドまたは XULRunner 1.8.0.4 をダウンロードして試してみてください。

+
+ + + + + + + +
+

ドキュメンテーション

+
+
+ JavaXPCOM Development
+
+ ソースの取得・構築方法、それから読み方・バグの報告の方法。
+
+
+
+ サンプルコード
+
+ いくつかの Java テストアプリケーションがソースツリーにチェックインされており、Java から Gecko の埋め込みや XPCOM を初期化する方法の例があります。
+
+
+
+ JavaXPCOM を使って Java アプリケーションへ Mozilla を組み込む
+
+ XULRunner には JavaXPCOM が標準搭載されており、これは、Java のコードと XPCOM の相互利用を可能にするものです。この記事で示すとおり、Java での XPCOM オブジェクトの操作は C++ の場合とそれほど大きな差はありません。
+
+

すべて見る...

+
+

コミュニティ

+
    +
  • Mozilla Java フォーラムを見る...
  • +
+ +
    +
  • Mozilla Embedding フォーラムを見る...
  • +
+ + +

関連項目

+
+
+ XPCOM, Embedding Mozilla
+
+
diff --git a/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/other_resources/index.html b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/other_resources/index.html new file mode 100644 index 0000000000..14a9eb1ee0 --- /dev/null +++ b/files/ja/mozilla/tech/xpcom/language_bindings/javaxpcom/other_resources/index.html @@ -0,0 +1,15 @@ +--- +title: その他の情報源 +slug: Mozilla/Tech/XPCOM/Language_Bindings/JavaXPCOM/Other_Resources +tags: + - JavaXPCOM + - 'XPCOM:Language Bindings' +translation_of: Mozilla/Tech/XPCOM/Language_bindings/JavaXPCOM/Other_Resources +--- +

その他の情報源

+ -- cgit v1.2.3-54-g00ecf