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

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

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

Содержание

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

Требования

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

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

Дополнительные сведения о загрузке и установки необходимого программного обеспечения см. в разделах Инструкции по установки IDE NetBeans 8.0 и Настройка 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. В поле "Имя проекта" введите JNIDemoJava.
  3. В качестве местоположения проекта можно указать любой каталог на компьютере. В этом примере используется папка по умолчанию "NetBeansProjects" в каталоге пользователя.
  4. Не снимая флажок 'Создать основной класс', измените имя основного класса на jnidemojava.Main.

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

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

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

  1. Чтобы открыть источник класса Main в редакторе, щелкните правой кнопкой мыши узел класса Main.java и выберите 'Открыть'.
  2. Замените строку //TODO code application logic here в методе main следующим кодом:
    new Main().nativePrint();
  3. В поле слева появится индикатор в виде лампочки, сообщающий об ошибке. Щелкните индикатор. Отобразится ярлык для создания метода nativePrint.
  4. Щелкните этот ярлык, после чего будет вставлен следующий код:
    private void nativePrint() {
          throw new UnsupportedOperationException("Not supported yet");
       }
  5. Удалите строку
    throw new UnsupportedOperationException("Not supported yet");
  6. Измените метод nativePrint(): вставьте ключевое слово native в подпись метода, чтобы она выглядела следующим образом:
    private native void nativePrint();

    Ключевое слово native означает, что реализация этого метода размещена во внешней библиотеке в машинном коде. Однако при запуске местоположение библиотеки не ясно.

    Новый метод main будет выглядеть следующим образом:

    public static void main(String[] args) {
           new Main().nativePrint();
       }
    
       private native void nativePrint();
    }
  7. Правой кнопкой мыши щелкните имя проекта и выберите пункт "Очистить и собрать". После этого проект должен успешно собраться.

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

В этом разделе будет использоваться 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. Оставьте данные во всех остальных полях без изменения и нажмите 'Готово'.

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

Настройка свойств проекта

  1. Правой кнопкой мыши щелкните узел проекта "JNIDemoCdl" и выберите "Свойства".
  2. В диалоговом окне свойств выберите узел "Компилятор C" в свойствах "Сборка" узла.
  3. Нажмите кнопку 'Включить каталоги и заголовки...'. В открывшемся диалоговом окне 'Включение каталогов и заголовков' нажмите 'Добавить'.
  4. Перейдите к каталогу JDK и выберите подкаталог include.
  5. Выберите параметр 'Сохранить путь как абсолютный', затем нажмите кнопку 'Выбрать', чтобы добавить этот каталог во включенные каталоги проекта.
  6. Аналогичным образом добавьте каталог JDK include/linux, затем нажмите кнопку "ОК".
    Снимок диалогового окна "Свойства проекта" и диалогового окна "Каталоги, включающие отладку".

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

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

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

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

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

  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 и выберите 'Собрать'. В окне 'Результаты' отображается следующее (или аналогичное) сообщение: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 171 мс).

Заключение

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

Сборка и запуск приложения

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

Настройка проекта Java

  1. Откройте файл Main.java в редакторе.
  2. Добавьте код инициализации для динамической библиотеки C++ после строки public class Main, используя путь к выходному файлу, укороченный в предыдущем упражнении:
    static {
            System.load("full-path-to-NetBeansProjects-dir/JNIDemoCdl/dist/libJNIDemoCdl.so");
           }
    
    Замените full-path-to-NetBeansProjects-dir путем к каталогу NetBeansProjects, который должен иметь следующий (или аналогичный) вид: /home/username/NetBeansProjects
  3. Сохраните файл Main.java.

Запуск приложения JNIDemoJava

  1. Выберите приложение 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