Зависание программы JNI - PullRequest
       5

Зависание программы JNI

3 голосов
/ 17 сентября 2009

В одном из моих Java-проектов я должен вызывать функцию C. Поскольку я новичок в JNI, я сначала попробовал простую программу Helloworld.

Я написал класс со ссылкой на собственный метод по имени sayHello(), который возвращает void и не принимает аргументов. Я скомпилировал класс и сгенерировал файл заголовка с помощью утилиты javah. Затем я скопировал подпись этой функции в новый C-файл как новую функцию и просто вызвал printf("Hello, World!") в этой функции. Я сгенерировал dll, используя gcc на моей оболочке cygwin. Я проверил, что DLL содержит функцию. Я зарегистрировал dll с помощью утилиты regsvr32.

Когда я запустил Java-программу для вызова функции sayHello(), DLL загружается, что я проверял, пытаясь удалить DLL, когда эта программа еще работала, но ответа нет, и приложение, похоже, чего-то ждал.

В чем может быть проблема с этим?

Исходный код выглядит следующим образом:

/* Hello.java */
public class Hello
{
    static
    {
        System.loadLibrary("hello");
    }

    public native void sayHello();

    public static void main(String[] args)
    {
        Hello h = new Hello();
        h.sayHello();
    }
}

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

#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Hello
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Hello_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

/* Hello.c */
#include <stdio.h>
#include <jni.h>

#include "Hello.h"

JNIEXPORT void JNICALL Java_Hello_sayHello
  (JNIEnv *env, jobject obj)
{
    printf("Hello, World!");
    return;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...