Java6固有のAPIを使えますか

リフレクション

JavaFX 1.2 SDKで作ったアプリケーションはJRE6上で動くにも関わらず、 JavaFX 1.2 SDKがライブラリとして提供するJDKのAPIのバージョンは5です。 このせいでJava6から登場したAPIを使うことができません。 ただし、実行の際はJava6で動くのでJava6のAPIが呼び出せるはずです。 そこでリフレクションという手は使えます。 Javaのリフレクションの何たるかはここでは省きます。

以下の例は、java.awt.DesktopというJava6で登場したAPIを リフレクションで無理やり呼び出しています。

例:

import java.lang.Class;
import java.lang.Throwable;
import java.lang.reflect.Method;
import java.net.URI;

public function browse(uriAsString:String):Void{
  try{
    var cls:Class = Class.forName("java.awt.Desktop");

    //public static synchronized java.awt.Desktop java.awt.Desktop.getDesktop()
    //を呼び出してインスタンスを取得します。
    var method:Method = cls.getMethod("getDesktop");
    var objDesktop = method.invoke(null);

    //public void java.awt.Desktop.browse(java.net.URI) throws java.io.IOException
    //を呼び出してデフォルトのブラウザを起動します。
    method = cls.getMethod("browse", Class.forName("java.net.URI"));
    method.invoke(objDesktop,new URI(uriAsString));
  }catch(e:java.io.IOException){
    e.printStackTrace();
  }catch(e:Throwable){
    e.printStackTrace();
  }
}

将来的にJavaFX SDKがJava6をサポートしてくれることを願っています。

Java6のAPIを使う処理を外部jar化する

Java6のAPIを呼び出すJavaプロジェクトを独立して作りjar化します。 もちろんJava6でコンパイルしてください。 このjarをJavaFXプロジェクトのライブラリに追加する方法は有効です。 JavaFXプロジェクトからはJava6のAPIを直接は呼び出すことなく、 サードパーティのjarというワンクッションを置いて呼び出すことが可能です。


カウンター

Home