#java #java-native-interface
#java #java-native-interface
Вопрос:
Я выполняю математические вычисления, используя собственные интерфейсы Java, но когда я попытался выполнить его на терминале, он показывает мне следующую ошибку.
kiran@kiran-X510UNR: ~ $ javac jnu.java
kiran@kiran-X510UNR: ~ $ javah -jni jnu
Ошибка: не удалось найти файл класса для ‘jnu’.
public native int add(int n1,int n2);
public native int sub(int n1,int n2);
public native int mul(int n1,int n2);
public native int div(int n1,int n2);
public static void main(String a[])
{
jnu tj = new jnu();
int ch,n1,n2;
Scanner sh = new Scanner(System.in);
System.out.println("Enter two numbers ");
n1 = sh.nextInt();
n2 = sh.nextInt();
System.out.println("n1.Addn2.Subn3.Muln4.Div");
ch = sh.nextInt();
switch(ch)
{
case 1:
System.out.println("Addition is : " tj.add(n1,n2));break;
case 2:
System.out.println("Subtraction is : " tj.sub(n1,n2));break;
case 3:
System.out.println("Multiplication is : " tj.mul(n1,n2));break;
case 4:
System.out.println("Division is : " tj.div(n1,n2));break;
default:
System.out.println("Wrong choice");break;
}
}
static
{
System.loadLibrary("jnu");
}
test.c
…
JNIEXPORT jint JNICALL Java_jnu_add(JNIEnv *env,jobject object,jint n1,jint n2)
{
return n1 n2;
}
JNIEXPORT jint JNICALL Java_jnu_sub(JNIEnv *env,jobject object,jint n1,jint n2)
{
return n1-n2;
}
JNIEXPORT jint JNICALL Java_jnu_mul(JNIEnv *env,jobject object,jint n1,jint n2)
{
return n1*n2;
}
JNIEXPORT jint JNICALL Java_jnu_div(JNIEnv *env,jobject object,jint n1,jint n2)
{
return n1/n2;
}
…
Я ожидаю, что файл заголовка должен быть сгенерирован, но ошибка показывает, что не удалось найти класс для jnu.
Комментарии:
1. Ваш код не читается, пожалуйста, отформатируйте его правильно.
2. Это работает для меня (при условии, что у вас есть
public class jnu {
). Это также предполагает, что вы не указали имя пакета. Если у вас есть имя пакета, вам нужно принять это во внимание. Например, если у вас естьpackage foo.bar;
, то jnu.java должно быть расположено вfoo/bar/
, и после запускаjavac foo/bar/jnu.java
вы должны запуститьjavah -jni foo.bar.jnu