JNI编码,从Java到C

时间:2016-04-22 18:59:24

标签: java c java-native-interface

我有一段Java代码,我需要使用JNI并在C中编写它。

此方法是从另一个类调用的,因此'newName'从另一个类传递给它。我还有一个Player类,它有一个设置玩家名称的方法。然后我返回一个String,其中包含'newName'和'dodMap.getGoal()',它在另一个类中定义。

public class gameLogic implements GameInterface {

private gameMap dodMap;
...


public String clientHello(String newName, Player player) {
    // Change the player name and then say hello to them
    player.setName(newName);
    return "HELLO " + newName + "\nGOAL " + dodMap.getGoal();
}

我已经对JNI做了一些阅读,并创建了一个.h类'javah'并得到了这个:

JNIEXPORT jstring JNICALL Java_gameLogic_clientHello (JNIEnv *, jobject, jstring, jobject);

我知道如何处理字符串,但我不知道如何处理播放器对象以及如何调用dodMap.getGoal();

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您必须通过JNI访问Java对象的字段和方法 - 这似乎是练习的目的 - 那么您将需要熟悉JNI docs。它们包含您所询问的各种事件的示例,以及所有JNI函数的参考,以及使用JNI时需要了解的整体信息。

您需要的一些JNI功能是:

由于代码中的固定字符串不会依赖Java字符串,因此您可能希望使用C数组操作来构建返回值(相反,使用已经讨论过的方法来调用{ {1}})。这涉及包括

在内的功能

请务必注意String.concat()jchar之间的区别。

正如您可能已经从我刚刚命名的不同功能的数量中猜到的那样,您被要求做的事既不简单也不有趣(但 可行)。在可能的情况下,最好设计JNI接口,以最大限度地减少在本机代码中使用Java对象的需要。