gpt4 book ai didi

c++ - 用 jni 显示 hello world swing

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:03 25 4
gpt4 key购买 nike

这是我的 main.cpp 代码:

#include <jni.h>
#include <QDebug>
int main(int argc, char *argv[]) {
JavaVM *jvm;
JNIEnv *env;
jstring jstr;
jobjectArray args;
jclass stringClass;

JavaVMInitArgs vm_args;
JavaVMOption options[3];

options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.classpath=.";
options[2].optionString = "";

vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;

jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (res < 0) {
qDebug()<<"Can't create Java VM\n";
exit(1);
};
jclass cls = env->FindClass("HelloWorldSwing");
if (cls == 0) qDebug()<<"Sorry, I can't find the class";
jmethodID get_main_id =
env->GetStaticMethodID(cls,"main","([Ljava/lang/String;)V");

jstr=env->NewStringUTF("hola que tal");
stringClass=env->FindClass("java/lang/String");
args=env->NewObjectArray(1,stringClass,jstr);

env->CallStaticVoidMethod(cls,get_main_id,args);

jvm->DestroyJavaVM();
qDebug()<<"Java VM destroy\n";

}//end main.

HelloWorldSwing 是一个显示带有“Hello world”文本的 jframe 的类,但不显示任何内容,如果我在 java 类中编写 system.out.println("hello world"),则功能正常。

最佳答案

您在 VM 有机会显示 UI 之前销毁它。

对 System.out.println 的调用是同步的,因此它发生在您销毁 VM 之前。

创建 UI 涉及在单独的线程上创建和分派(dispatch)事件。如果您只是在销毁 VM 之前暂停几秒钟,我想您会看到您的 UI 出现。

关于c++ - 用 jni 显示 hello world swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12006264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com