2023-01-20 322
我创建了一个C ++类,该类应该通过以下内容来调用Main.main: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/jni/spec/invocation.html#wp9502 .
我没有工作,所以我关注: http://www.coderanch.com/t/525082/cpp/create-jvm-native-code-call
和:
imp_jni_crea”> http://www.codeproject.com/questions/263687/linker-error-error-undefined-efined-tefined-to-to-to-to-to- imp _jni_crea
什么都没有.因此,我将代码重新更改为Oracle的调用API文章(第一个链接).
.
我的C ++代码看起来像:
在jni.hpp文件中:
#include <jni.h>
#include <windows.h>
#include <iostream>
class Jvm
{
private:
JavaVM* jvm;
JNIEnv* env;
JavaVMInitArgs jvm_args;
JavaVMOption* options;
public:
Jvm();
};
在jni.cpp文件中:
Jvm::Jvm()
{
options = new JavaVMOption[3];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path=C:/Users/Brandon/Documents/NetBeansProjects/Loader/build/classes";
options[2].optionString = "-verbose:class";
jvm_args.version = JNI_VERSION_1_6;
jvm_args.nOptions = 3;
jvm_args.options = options;
jvm_args.ignoreUnrecognized = false;
//JNI_GetDefaultJavaVMInitArgs(&jvm_args);
JNI_CreateJavaVM(&jvm, reinterpret_cast<void**>(&env), &jvm_args);
jclass MainClass = env->FindClass("loader.Main");
//Crashes on the next line:
jmethodID MainMethod = env->GetStaticMethodID(MainClass, "main", "([Ljava/lang/String;)V");
MessageBox(NULL, "", "", 0);
Sleep(1000);
jvm->DestroyJavaVM();
delete[] options;
}
我的Java代码看起来像:
package loader;
public class Main {
public static void main(String[] args) {
//JavaProcess.exec(ClientApplet.class);
System.out.println("Hello!");
}
}
和详细印刷:
[Loaded loader.Main from file:/C:/Users/Brandon/Documents/NetBeansProjects/Loader/build/classes/]
Process returned -1073741571 (0xC00000FD) execution time : 1.730 s
Press any key to continue.
我在做什么错?为什么它无法调用该方法?
我加载的JNI.dll来自:C:\Program Files\Java\jdk1.7.0_21\jre\bin\server\jvm.dll,因为最新的Java 7u25没有bin\client\jvm.dll.
我什至静态地链接到jvm.lib:C:\Program Files\Java\jdk1.7.0_21\lib\jvm.lib.
jclass MainClass = env->FindClass("loader.Main");
这是错误的.与方法签名一样,您必须在使用JNI函数时使用斜线而不是点.
正确的代码是:
jclass MainClass = env->FindClass("loader/Main");
以上所述是小编给大家介绍的从JNI调用main方法失败,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25999.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态