Начало работы с JNI с IDE NetBeans и подключаемым модулем C/C++ Plugin в Linux

В этой учебной программе рассматривается создание простого приложения, использующего код JavaTM Native Interface (JNI), написанный на языке программирования C.

Этот учебный курс создан для Linux.

Содержание

Содержимое на этой странице применимо к IDE NetBeans 6.7, 6.8 и 6.9
Требования
Настройка среды для учебного курса
Настройка проекта приложения Java
Настройка нового проекта динамической библиотеки на языке C/C++
Сборка и запуск приложения
Следующие действия

Требования

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Программное обеспечение или материал Требуемая версия
IDE NetBeans версия 6.7 с подключаемым модулем NetBeans C/C++
Комплект для разработчика на языке Java (JDK) версия 6
Компиляторы C и C++, make, gdb

Набор инструментов C/C++, простестированный с помощью IDE NetBeans

Дополнительные сведения о загрузке и установки необходимого программного обеспечения см. в разделах Инструкции по установки IDE NetBeans 6.7 и Настройка IDE NetBeans дляC/C++/Fortran.

Настройка среды для учебного курса

Для этого учебного курса потребуются модули Java и C/C++. Если комплект C/C++ IDE NetBeans уже загружен, пользователи могут загрузить дополнительные модули Java по отдельности.

Чтобы определить наличие модулей Java и C/C++, выберите пункт меню "Файл > Новый проект". В категории проектов должны входить Java и C/C++.

Чтобы загрузить отсутствующие модули Java и C/C++, выполните следующие действия.

  1. В IDE NetBeans выберите 'Сервис' > 'Подключаемые модули'.
  2. Во вкладке "Доступные подключаемые модули" установите флажок для Java или C/C++ в зависимости от того, какой модуль отсутствует в среде IDE. Если оба модуля уже установлены, они отобразятся во вкладке "Установлено".
  3. Нажмите кнопку "Установить".
  4. Щелкните 'Далее' в диалоговом окне установщика IDE NetBeans, установите флажок принятия условий лицензии установщика и щелкните 'Установить'.
  5. По завершении установки нажмите кнопку "Готово".

Настройка проекта приложения Java

Для данной программы требуются проект Java и проект C. В этом разделе описаны создание и настройка проекта Java для разрабатываемого приложения JNI. Для этого потребуется создать проект приложения Java, инициализировать его главный класс и добавить метод в машинном коде к этому классу.

  1. Выберите команду "Файл" > "Новый проект". Выберите категорию "Java" и тип проекта "Приложение Java". Нажмите кнопку "Далее".
  2. моментальный снимок мастера создания проектов
  3. В поле "Имя проекта" введите JNIDemoJava.
  4. В качестве местоположения проекта можно указать любой каталог на компьютере. В этом примере используется папка по умолчанию "NetBeansProjects" в каталоге пользователя.
  5. Установите флажок "Создать главный класс" и оставьте значение по умолчанию в соответствующем текстовом поле.
  6. оставьте флажок "Установить как главный проект" установленным. Затем нажмите кнопку "Готово".

    В среде IDE будет создана папка проекта NetBeansProjects/JNIDemoJava.


    Снимок страницы 'Имя и местоположение' мастера создания приложений Java

Изменение исходного кода главного класса

  1. Чтобы открыть источник класса Main в редакторе, щелкните правой кнопкой мыши узел класса Main.java и выберите 'Открыть'.
  2. Замените тело метода main на следующий текст:
    new Main().nativePrint();
  3. В поле слева появится индикатор в виде лампочки, сообщающий об ошибке. Щелкните индикатор. Отобразится ярлык для создания метода nativePrint.
  4. Щелкните этот ярлык, после чего будет вставлен следующий код:
    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. Правой кнопкой мыши щелкните имя проекта и выберите пункт "Очистить и собрать". После этого проект должен успешно собраться.

Создание файла заголовка библиотеки в машинном коде

В этом разделе будет использоваться javah – средство Java, используемое для создания заголовка на языке C из класса Java.
  1. В окне терминала перейдите к каталогу NetBeansProjects.
  2. Введите следующее значение:
    javah -o JNIDemoJava.h -classpath JNIDemoJava/build/classes jnidemojava.Main
    

    В каталоге NetBeansProjects будет создан файл заголовка на языке C JNIDemoJava.h. Этот файл требуется для того, чтобы обеспечить предоставление правильного объявления функции для реализации метода nativePrint() в машинном коде. Он понадобится позже при создании части приложения на языке C.

  3. Переключение обратно в окно IDE NetBeans.

Заключение

В этом упражнении вы создали новый проект приложения 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, затем нажмите кнопку "ОК".
  7. Снимок диалогового окна "Свойства проекта" и диалогового окна "Каталоги, включающие отладку".

    Эти параметры требуются для включения ссылок на библиотеку Java jni.h из кода C.

  8. Найдите область "Командная строка" в параметрах компилятора C. Щелкните текстовое поле в свойстве 'Дополнительные параметры' и введите -shared -m32. Снимок редактируемого поля Debug-Additional Optionstext

    Параметр -shared указывает создание динамической библиотеки.
    Параметр -m32 указывает создание двоичного файла для 32-разрядных платформ. По умолчанию в 64-разрядных системах компилируются двоичные файлы для 64-разрядных платформ, что приводит к возникновению множества проблем в 32-разрядных JDK.

  9. Перейдите в категорию "Компоновщик" на левой панели.
    Снимок диалогового окна "Свойства проекта" со свойства Linker
  10. Поставьте курсор в текстовое поле "Вывод" и замените строку
    $[CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/libJNIDemoCdl.so
    на строку
    dist/libJNIDemoCdl.so
    чтобы упростить путь к созданному файлу совместно используемого объекта. Это поможет упростить процесс создания ссылки из Java.
  11. Нажмите кнопку "ОК". Определенные параметры сохранены.

Добавление файла заголовка

  1. Перейдите в окно терминала и переместите ранее созданный файл заголовка JNIDemoJava.h из каталога NetBeansProjects в каталог проекта библиотеки C/C++ – NetBeansProjects/JNIDemoCdl.
  2. В окне 'Проекты' щелкните правой кнопкой мыши узел 'Исходные файлы' проекта JNIDemoCdl и выберите 'Добавить существующий элемент'. Перейдите к NetBeansProjects/JNIDemoCdl и выберите файл JNIDemoJava.h, затем нажмите кнопку "ОК".

    Файл 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 и выберите пункт "Сборка проекта". В окне вывода отобразится: Build successful. Выходное значение 0.

Заключение

В этом упражнении вы создали новую динамическую библиотеку C/C++, указали ее местоположение и настроили ее для сборки реализации JNI метода Java. Вы добавили созданный файл заголовка для метода в машинном коде, объявленного в приложении 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. Чтобы настроить проект Java JNIDemoJava как главнй проект, щелкните правой кнопкой мыши узел проекта и выберите 'Установить как главный проект'.
  2. Чтобы запустить приложение, нажмите клавишу F6 или кнопку "Выполнить" на панели инструментов. После этого программа будет выполнена, и в окне вывода отобразится следующее сообщение:
    Снимок окна вывода

Заключение

В этом упражнении вы выполнили окончательную настройку и запустили приложение, чтобы проверить, что реализация метода в машинном коде берется из библиотеки C, скомпилированной в машинный код.

Что дальше?

Чтобы проверить проект на рабочем примере, загрузите файл ZIP, содержащий исходный код, с веб-сайта netbeans.org.

Для получения дополнительной информации используйте следующие документы:

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