Top > OOoSF > Java > Hint

ヒント Edit

Java でマクロを書いたり UNO コンポーネントを作成するときのヒント。

インターフェースクエリー Edit

インターフェースのクエリーは煩雑ですが、慣れるとそれほどでもなくなります。

たとえば、デスクトップ (com.sun.star.frame.Desktop) はドキュメントを読み込んだり、現在のドキュメントを取得したりとさまざまなです。

XSCRIPTCONTEXT からデスクトップを取得した場合を見てみます。getDesktop メソッドの返り値は XDesktop インターフェースです。

com.sun.star.frame.XDesktop 
    getDesktop()
import com.sun.star.frame.XDesktop;

XDesktop xDesktop = XSCRIPTCONTEXT.getDesktop();

ここでの返り値 XDesktop はベースインターフェースであり、このインターフェースのメソッドはインターフェースをクエリーせずに呼び出せます。

ところで、オブジェクトブラウザで xDesktop がエクスポートしているインターフェースを調べると次のものがあります。

  • com.sun.star.beans.XPropertySet
  • com.sun.star.frame.XComponentLoader
  • com.sun.star.frame.XDesktop
  • com.sun.star.frame.XDispatchProvider
  • com.sun.star.frame.XDispatchProviderInterception
  • com.sun.star.frame.XDispatchResultListener
  • com.sun.star.frame.XFrame
  • com.sun.star.frame.XFramesSupplier
  • com.sun.star.frame.XTasksSupplier
  • com.sun.star.lang.XComponent
  • com.sun.star.lang.XServiceInfo
  • com.sun.star.lang.XTypeProvider
  • com.sun.star.task.XInteractionHandler
  • com.sun.star.uno.XInterface

これらのうち XDesktop は直接利用できますがそれ以外のものは全てインターフェースをクエリーしてから使用しなければいけません。

ドキュメントを読み込むときに使用する loadComponentFromURL メソッドは com.sun.star.frame.XComponentLoader インターフェースに属します。次のようにしてクエリーしてからメソッドを呼び出します。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
 
 
 
 
 
 
 
import com.sun.star.uno.UnoRuntime;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XComponent;
 
XComponentLoader xLoader = (XComponentLoader) UnoRuntime.queryInterface(
    XComponentLoader.class, xDesktop);
XComponent xLoader.loadComponentFromURL(.......);

ところで、フレーム全てにアクセスしたくなったので com.sun.star.frame.XFramesSupplier インターフェースを使用します。

Everything is expanded.Everything is shortened.
  1
  2
  3
 
 
 
import com.sun.star.frame.XFramesSupplier;
XFramesSupplier xFrames = (XFramesSupplier) UnoRuntime.queryInterface(
    XFramesSupplier.class, xDesktop);

ここで、 ...queryInterface(XFramesSupplier.class, xLoader); といったことはできません。Null が返ることでしょう。

ベースインターフェース以外はすべてクエリーする必要があります、そのかわりベースインターフェースはクエリーする必要はありません。

juh, jurt, unoil, ridl Edit

  • juh: Java Uno Helper
  • jurt: Java Uno RunTime libraries
  • unoil: UNO IdL ?
  • ridl: r IDL ?

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes