Java 2 SDK 開発ガイド (Solaris 編)

NMI から JNI への移行

Java 2 SDK Solaris 版は NMI をサポートしません。インストールによっては、NMI は JNI 1.0、JNI は JNI 1.1 と呼ばれます。


注 -

ネイティブメソッドを含むアプリケーションはプラットフォームに依存し、「Write Once Run AnywhereTM」ではありません。このことは、NMI または JNI のどちらが使用されているかに関係ありません。ネイティブメソッドのサポートが変更されても、アプレットには影響しません。


移植

NMI を使用するアプリケーションを JNI インタフェースを使用するように変更するのは簡単です。たとえば、不慣れな技術者でも 2 日ほどで 6000 行の C コードを移植しました。この例では、NMI は少し使われているだけでしたが、使用箇所は広く分散していました。

javah

javah コマンドは、ネイティブメソッドの実装に必要な C ヘッダとソースファイルを生成します。C プログラムは生成されたヘッダとソースファイルを使用して、ネイティブソースコードのオブジェクトのインスタンス変数を参照します。JNI には、ヘッダ情報やスタブファイルは必要ありません。引き続き javah コマンドで jni オプションを使用して、JNI 形式のネイティブメソッドに必要なネイティブメソッド関数プロトタイプを生成することができます。結果は、.h ファイルに書き込まれます。

JDK 1.1 のデフォルトのモードでは、javah コマンドは NMI 出力を生成します。

NMI インタフェースは Java 2 SDK Solaris 版の実装とまったく互換性がないため、Java 2 SDK Solaris 版で -old フラグを使用して、NMI 形式の出力を生成することはできません。Java 2 SDK Solaris 版では、-old フラグは解析され、見つかった場合は、-old not supported メッセージが生成され、javah は終了します。