Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java22.pptx
Скачиваний:
130
Добавлен:
16.04.2015
Размер:
142.27 Кб
Скачать

JAVA-ТЕХНОЛОГИЯ

Сафонов Владимир Олегович

Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)

Email: vosafonov@gmail.com

Лекция 22

Платформно-зависимые (native) методы в Java. Java Native Interface (JNI)

Определение JNI

Java Native Interface (JNI) – это механизм, позволяющий байт-коду Java вызывать native («родной») код, исполняемый под управлением конкретной операционной системы

Native-код может быть написан на различных компилируемых языках, таких как C, C++, assembler

(С) Сафонов В.О. 2013

Когда используется JNI

Необходимо выполнить какие-либо системные задачи (поддержки которых нет в стандартной библиотеке)

Необходимо использовать уже существующую библиотеку (legacy code)

Необходимо обеспечить эффективность выполнения кода

(С)Сафонов В.О. 2013

Пример разработки программы, использующей JNI

Шаги

1.Создать исходный код класса с объявлением native- метода.

2.Скомпилировать этот файл компилятором javac.

3.Использовать утилиту javah для генерации С header- файла.

4.Написать реализацию native-метода на C++.

5.Скомпилировать код на C, создав native-библиотеку.

6.Запустить программу, используя интерпретатор java.

(С)Сафонов В.О. 2013

Пример. Шаг 1. Файл HelloWorld.java

public class HelloWorld

{

static

{

System.loadLibrary(“libhello”);

}

public native void sayHello();

public static void main(String[] args)

{

new HelloWorld().sayHello();

}

}

(С) Сафонов В.О. 2013

Пример. Шаг 1. Native-методы

Метод sayHello() объявлен с ключевым словом “native”. Это означает, что он не требует реализации на Java и будет реализован как машинно-зависимый.

(С) Сафонов В.О. 2013

Пример. Шаг 2. Компиляция HelloWorld.java

javac HelloWorld.java

HelloWorld.java -> HelloWorld.class

(С) Сафонов В.О. 2013

Пример. Шаг 3. javah

javah – утилита, входящая в JDK и служащая для связи между кодом на C/C++ и Java

javah генерирует C header-файлы (*.h) по байт-коду класса Java, содержащему ссылки на native- методы

(С) Сафонов В.О. 2013

Пример. Шаг 3. javah

javah HelloWorld

HelloWorld.class -> HelloWorld.h

(С) Сафонов В.О. 2013

Пример. Шаг 3. HelloWorld.h

/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h>

/* Header for class HelloWorld */

#ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus

extern "C" { #endif

/*

*Class: HelloWorld

*Method: sayHello

*Signature: ()V

*/

JNIEXPORT void JNICALL Java_HelloWorld_sayHello (JNIEnv *, jobject);

#ifdef __cplusplus

}

#endif

#endif

(С) Сафонов В.О. 2013

Соседние файлы в папке java1_2013_2014