与jni一起展示hello world swing
show hello world swing with jni
这是我的主.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 VMn";
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 destroyn";
}//end main.
HelloWorldSwing是一个类,它显示一个带有"Hello-world"文本的jframe,但不显示任何内容,如果我在java类中编写system.out.println("helloworld"),则函数正确。
在VM有机会显示UI之前,您正在破坏它。
对System.out.println的调用是同步的,因此它发生在销毁VM之前。
创建UI涉及在单独的线程上创建和调度事件。如果你只是在销毁虚拟机之前暂停几秒钟,我想你会看到你的UI出现。
问题出现在java的主类中。JNI调用主方法,当它结束时,程序结束。我只是在主方法中放了一个guithread.join ();
,所有的都能正确运行。
相关文章:
- 无法编译wxWidgets Hello World
- 简单C++"Hello World"程序的执行时间长
- 使用 AWS Lambda 触发C++文件 - Hello World
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- 我怎样才能在行尾使用 cout<<"hello world";不使用 ;
- QWebSocket Hello World Example
- 为什么下面的Hello World程序在PowerShell上没有显示任何输出?同一程序在CMD上显示正确的输出
- 我需要安装什么才能获得在Windows Server 2012 R2 Standard上运行C++hello world
- 运行Qt时处理退出代码0xC0000135 hello world
- 如何使用CLion和MSVC编译器工具链编译wxWidgets Hello World应用程序而没有错误?
- 为什么 MSVC C++编译器将一个简单的 Hello World 扩展为 4000 行汇编?
- 无法运行简单的N-API hello-world示例
- 如何使用python运行Hello world c ++代码
- Eclipse 构建错误在默认的 hello world 上
- SDL Hello World 程序不输出消息
- 在 Hello World.exe 中0x0F828F0E (ucrtbased.dll) 处未处理的异常: 0xC00
- 为什么一个简单的"Hello World"风格的程序不能用Turbo C++编译?
- C Hello World程序中使用了哪种数学
- Visual Studio 中的 Hello World C++ 应用程序 - 关于预编译标头不同的问题
- CPP-Netlib Hello World 示例不会在 Linux 上编译