如何使用JNI_CreateJavaVM运行模块化Java应用程序

时间:2019-03-29 13:51:18

标签: java java-native-interface java-11 jigsaw jnienv

我正在将本机Windows应用程序启动器从Java 8移植到Java11。我们曾经调用JNI_CreateJavaVM方法来实例化JVM实例,查找主类并调用其main方法。对于模块化应用程序,env->FindClass不会返回我们的应用程序类。我尝试调用Class.forName,但它也不会返回类实例。

此外,JNI_CreateJavaVM抱怨--add-modules的论点。

我们应该如何指定要为JNI api加载的模块?

如何从本机部分中找到应用程序类?

1 个答案:

答案 0 :(得分:1)

我能够使用JLI api运行Java应用程序。我使用以下代码来调用JLI api: https://github.com/MovingBlocks/TerasologyJavaLauncher/blob/master/jli_library_win.cpp

似乎不再需要使用应用程序挂钩进行黑客入侵。我尝试使用JDK 11.0.2,它可以按原样正确工作,而不会入侵jli.dll路径。