Как исправить «Не удалось найти файл класса для ‘jnu'».

#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