LinuxでのNetBeans IDEとC/C++プラグインを使用したJNIの開始

このチュートリアルでは、Cプログラミング言語で記述されたJavaTM Native Interface (JNI)コードを使用する、単純なアプリケーションの作成について説明します。

このチュートリアルはLinuxに固有です。

内容

このページの内容は、NetBeans IDE 6.7、6.8および6.9に適用されます
要件
環境をチュートリアル用に設定
Javaアプリケーション・プロジェクトの設定
新規C/C++動的ライブラリ・プロジェクトの設定
アプリケーションのビルドと実行
次の手順

要件

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE バージョン6.7とNetBeans C/C++プラグイン・モジュール
Java Developer Kit (JDK) バージョン6
C/C++コンパイラ、makegdb

NetBeans IDEでテスト済のC/C++ツール・コレクション

必要なソフトウェアのダウンロードとインストールについては、NetBeans IDE 6.7のインストールおよびC/C++/Fortran向けのNetBeans IDEの構成を参照してください。

環境をチュートリアル用に設定

このチュートリアルにはJavaモジュールとC/C++モジュールの両方が必要です。NetBeans IDE C/C++バンドルをすでにダウンロードしている場合、追加のJavaモジュールを個別にダウンロードできます。

JavaおよびC/C++モジュールがあるかどうか判別するには、「ファイル」>「新規プロジェクト」を選択します。プロジェクト・カテゴリにJavaとC/C++の両方が含まれています。

存在しないJavaおよびC/C++モジュールをダウンロードするには:

  1. NetBeans IDEで、「ツール」>「プラグイン」を選択します。
  2. 「使用可能なプラグイン」タブで、どちらがIDEに存在しないかに応じて、JavaまたはC/C++のチェックボックスを選択します。プラグインがすでに存在する場合、プラグインは「インストール済」タブに表示されます。
  3. 「インストール」をクリックします。
  4. 「NetBeans IDEのインストーラ」ダイアログ・ボックスで「次」をクリックし、ライセンス条項のチェックボックスに同意し、「インストール」をクリックします。
  5. インストールが完了したら「終了」をクリックします。

Javaアプリケーション・プロジェクトの設定

このプログラムには、JavaプロジェクトおよびCプロジェクトが必要です。この項では、開発するJNIアプリケーション用のJavaプロジェクトを作成および構成します。新規Javaアプリケーション・プロジェクトを作成し、そのメイン・クラスを初期化し、ネイティブ・メソッドをこのクラスに追加します。

  1. 「ファイル」>「新規プロジェクト」を選択します。「Java」カテゴリおよび「Javaアプリケーション」プロジェクト・タイプを選択します。「次」をクリックします。
  2. 新規プロジェクト・ウィザードのスクリーンショット
  3. 「プロジェクト名」フィールドに「JNIDemoJava」と入力します。
  4. 「プロジェクトの場所」はコンピュータ上の任意のディレクトリに変更できますが、ここではユーザー・ディレクトリ内のデフォルトのNetBeansProjectsを使用します。
  5. 「メイン・クラスの作成」チェックボックスは選択したままにし、対応するテキスト・フィールドのデフォルト値を受け入れます。
  6. 「メイン・プロジェクトとして設定」チェックボックスがすでに選択されていることを確認します。次に、「終了」をクリックします。

    IDEによって、NetBeansProjects/JNIDemoJavaプロジェクト・フォルダが作成されます。


    新規 - Javaアプリケーション・ウィザードの名前と場所ページのスクリーンショット

メイン・クラスのソースの編集

  1. メイン・クラスのソースをエディタで開くには、Main.javaクラス・ノードを右クリックして「開く」を選択します。
  2. mainメソッドの本文を次で置き換えます。
    new Main().nativePrint();
  3. エラーおよび電球を表示するインジケータが左マージンに示されるのがわかります。インジケータをクリックすると、メソッドnativePrintを作成することを求めるショートカットが表示されます。
  4. このショートカットをクリックすると、IDEは次のコードを挿入します。
    private void nativePrint() {
          throw new UnsupportedOperationException("Not yet implemented");
       }
  5. nativePrint()メソッドの本文を、その内容を削除することによって変更し、nativeキーワードをメソッド署名に挿入して、次のようになるようにします。
    private native void nativePrint();

    nativeキーワードは、メソッドが、外部ネイティブ・ライブラリにある実装を持つことを示します。ただし、実行時は、ライブラリの場所は明確ではありません。

    新しいmainメソッドは次のようになります。

    public static void main(String[] args) {
           new Main().nativePrint();
       }
    
       private native void nativePrint();
    }
  6. プロジェクト名を右クリックし、「消去してビルド」を選択します。プロジェクトは正常にビルドされます。

ネイティブ・ライブラリ・ヘッダー・ファイルの作成

この項では、JavaクラスからCヘッダーを作成するJavaツールであるjavahを使用します。
  1. ターミナル・ウィンドウで、NetBeansProjectsディレクトリに移動します。
  2. 次を入力します。
    javah -o JNIDemoJava.h -classpath JNIDemoJava/build/classes jnidemojava.Main
    

    JNIDemoJava.h Cヘッダー・ファイルがNetBeansProjectsディレクトリに生成されます。このファイルはnativePrint()メソッドのネイティブ実装のための正しい関数宣言を提供するために必要です。後でこのアプリケーションのC部分を作成するとき、これが必要になります。

  3. NetBeans IDEウィンドウに戻ります。

要約

この課題では、新規Javaアプリケーション・プロジェクトを作成し、その場所を指定し、プロジェクトのメイン・クラスのパッケージおよび名前を定義しました。また、メイン・クラスに新規メソッドを追加し、ネイティブ実装を持つメソッドとして新規メソッドをマークしました。最後のステップとして、後でネイティブ・ライブラリのコンパイルで必要になるCヘッダー・ファイルを作成しました。

新規C/C++動的ライブラリ・プロジェクトの設定

この項では、アプリケーションのネイティブ部分を作成する方法を示します。C++動的ライブラリ・プロジェクトを作成し、JNIコードをビルドできるようこれを構成します。

プロジェクトを設定した後、アプリケーションのJava部分で以前宣言したネイティブ・メソッドのための実装を作成します。

  1. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「C/C++」を選択します。「プロジェクト」から「C/C++動的ライブラリ」を選択します。「次」をクリックします。
    新規プロジェクト・ウィザードのプロジェクトを選択ページのスクリーンショット
  2. 「プロジェクト名」フィールドに「JNIDemoCdl」と入力します。
  3. 「プロジェクトの場所」フィールドには、Javaアプリケーション・プロジェクトに使用したのと同じ場所であるNetBeansProjectsを使用します。この場所はデフォルト値として表示されます。
  4. 他のすべてのフィールドはデフォルトを受け入れます。
  5. 「メイン・プロジェクトとして設定」チェックボックスがすでに選択されていることを確認します。次に、「終了」をクリックします。

    IDEはNetBeansProjects/JNIDemoCdlプロジェクト・フォルダを作成します。

プロジェクト・プロパティの設定

  1. 「JNIDemoCdl」プロジェクト・ノードを右クリックし、「プロパティ」を選択します。
  2. 「プロパティ」ダイアログ・ボックスで、「ビルド」プロパティの下にある「Cコンパイラ」ノードを選択します。
  3. 「インクルード・ディレクトリ...」ボタンをクリックし、「インクルード・ディレクトリ」ダイアログ・ボックスで「追加」をクリックします。
  4. JDKディレクトリを参照し、includeサブディレクトリを選択します。
  5. 「絶対として保存」オプションを選択した後、「選択」をクリックして、このディレクトリをプロジェクトの「インクルード・ディレクトリ」に追加します。
  6. JDKのinclude/linuxディレクトリを同じ方法で追加し、「OK」をクリックします。
  7. 「プロジェクト・プロパティ」ダイアログ・ボックスと「デバッグ-インクルード・ディレクトリ」ダイアログ・ボックスのスクリーンショット

    これらの設定は、CコードからJava jni.hライブラリへの参照を有効にするために必要です。

  8. 「Cコンパイラ」オプションの「コマンド行」領域を見つけます。「追加のオプション」プロパティのテキスト・フィールド内をクリックし、-shared -m32と入力します。編集するデバッグの「追加のオプション」テキスト・フィールドのスクリーンショット

    -sharedオプションは、動的ライブラリを生成することをコンパイラに指定します。
    -m32オプションは、32ビット・バイナリを作成することをコンパイラに指定します。64ビット・システムのデフォルトでは、コンパイルされたバイナリは64ビットで、このことは32ビットJDKで多くの問題を引き起こします。

  9. 左パネルの「リンカー」カテゴリをクリックします。
    「リンカー」プロパティが表示された「プロジェクト・プロパティ」ダイアログ・ボックスのスクリーンショット
  10. 「出力」テキスト・フィールドをクリックして置換します。次の文字列を:
    $[CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libJNIDemoCdl.so
    次の文字列へ:
    dist/libJNIDemoCdl.so
    結果の共有オブジェクト・ファイルのパスが簡素化されます。これで、Javaからファイルを参照しやすくなります。
  11. 「OK」をクリックします。定義された設定が保存されます。

ヘッダー・ファイルの追加

  1. ターミナル・ウィンドウに移動し、以前生成したJNIDemoJava.hヘッダー・ファイルをNetBeansProjectsディレクトリからC/C++ライブラリのプロジェクト・ディレクトリであるNetBeansProjects/JNIDemoCdlに移動します。
  2. 「プロジェクト」ウィンドウで、JNIDemoCdlプロジェクトの「ソース・ファイル」ノードを右クリックし、「既存の項目の追加」を選択します。NetBeansProjects/JNIDemoCdlに移動してJNIDemoJava.hファイルを選択し、「OK」をクリックします。

    JNIDemoJava.hファイルが「ソース・ファイル」の下に表示されます。

    「プロジェクト」ウィンドウのスクリーンショット

メソッドの実装

  1. JNIDemoCdl」プロジェクトの「ソース・ファイル」ノードを右クリックし、「新規」>「Cソース・ファイル」を選択します。「ファイル名」フィールドに「JNIDemo」と入力し、「終了」をクリックします。エディタはJNIDemo.cファイルを開きます。
  2. 次のコードを入力して、JNIDemo.cファイルを編集します。
    #include <jni.h>
    #include <stdio.h>
    #include "JNIDemoJava.h"
    
    JNIEXPORT void JNICALL Java_jnidemojava_Main_nativePrint
            (JNIEnv *env, jobject obj)
    {
    
        printf("\nHello World from C\n");
    
    }
    
  3. JNIDemo.cファイルを保存します。
  4. JNIDemoCdl」プロジェクト・ノードを右クリックし、「プロジェクトをビルド」を選択します。「出力」ウィンドウに次のように表示されます: 「ビルド成功。終了値0。

要約

この課題では、新規C/C++動的ライブラリを作成し、その場所を指定し、JavaメソッドのJNI実装をビルドできるようにこれを構成しました。Javaアプリケーション内で宣言したネイティブ・メソッド用の生成済ヘッダー・ファイルを追加し、これを実装しました。

アプリケーションのビルドと実行

この課題では、アプリケーションのJava部分に対して、いくつかの最終的な変更を実行します。これらの変更は、前の課題でコンパイルしたネイティブ・ライブラリをJava部分が正しくロードするために必要です。この後、結果のアプリケーションをコンパイルおよび実行します。

Javaプロジェクトの構成

  1. エディタでMain.javaファイルを開きます。
  2. 前の課題で短縮した出力ファイルのパスを使用して、次の初期化コードを追加します。
    static {
            System.load("full-path-to-NetBeansProjects-dir/JNIDemoCdl/dist/libJNIDemoCdl.so");
           }
    
    full-path-to-NetBeansProjects-dir/home/username/NetBeansProjectsのようにしてください
  3. Main.javaファイルを保存します。

アプリケーションの実行

  1. JNIDemoJava Javaプロジェクトをメイン・プロジェクトとして設定するために、プロジェクト・ノードを右クリックし、「メイン・プロジェクトとして設定」を選択します。
  2. F6を押すか、ツールバーの「実行」ボタンをクリックして、アプリケーションを実行します。プログラムは正しく実行され、「出力」ウィンドウに次が表示されます。
    「出力」ウィンドウのスクリーンショット

要約

この課題では、いくつかの最終的な構成手順を実行し、アプリケーションを実行して、ネイティブ・メソッドの実装が、ネイティブCライブラリからのものであることを確認しました。

次の手順

作業を実際の例に対して確認する場合、netbeans.orgからソース・コードを含むzipファイルをダウンロードできます。

次のドキュメントを使用して詳細情報を入手できます。

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo