使用JNI从Java创建QMainWindow
我试图直接使用JNI从Java创建一个Qt主窗口,但遇到了一个线程错误 我的代码如下所示: 测试等级:使用JNI从Java创建QMainWindow,java,qt,java-native-interface,Java,Qt,Java Native Interface,我试图直接使用JNI从Java创建一个Qt主窗口,但遇到了一个线程错误 我的代码如下所示: 测试等级: public class Test { public static void main(String... args) { System.out.println(System.getProperty("java.library.path")); TestWindow f = new TestWindow(); f.show();
public class Test
{
public static void main(String... args)
{
System.out.println(System.getProperty("java.library.path"));
TestWindow f = new TestWindow();
f.show();
}
}
测试窗口类:
public class TestWindow
{
static { System.loadLibrary("mylib"); }
public native void show();
}
C++impl:
void JNICALL Java_testpackage_TestWindow_show
(JNIEnv *, jobject)
{
int c = 0; char** a = NULL;
QApplication* app = new QApplication(c, a);
QMainWindow* mw = new QMainWindow();
mw->setWindowTitle("Hello");
mw->setGeometry(150, 150, 400, 300);
mw->show();
QApplication::exec();
}
当实例化QMainWindow对象时,我得到了绘制但冻结的窗口(它不接收任何事件)和以下错误消息:
QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread
我知道所有的UI操作都必须在UI线程中完成,但在我的示例中,我在我运行的唯一线程中创建了QApplication,因此,所有操作都应该正常工作
我使用Qt::QueuedConnection从QMetaObject::invokeMethod的东西中执行了一些“show”方法的代码测试,但没有任何东西可以正常工作
我知道我可以用Jambi。。。但我知道这也可以在本地完成,这就是我想做的:)
有什么想法吗?提前谢谢
Ernesto只是一个建议*:您是否应该在单独的线程中实例化本机窗口
public class Test
{
public static void main(String... args)
{
System.out.println(System.getProperty("java.library.path"));
new Thread(new Runnable() {
public void run() {
TestWindow f = new TestWindow();
f.show();
}
}).start();
}
}
*我从未使用本机GUI编程Java应用程序。也许你应该考虑秋千还是SWF?< /P>
另一个建议是尝试JNA而不是JNI:只是一个建议*:您可能应该在单独的线程中实例化本机窗口
public class Test
{
public static void main(String... args)
{
System.out.println(System.getProperty("java.library.path"));
new Thread(new Runnable() {
public void run() {
TestWindow f = new TestWindow();
f.show();
}
}).start();
}
}
*我从未使用本机GUI编程Java应用程序。也许你应该考虑秋千还是SWF?< /P>
另一个建议是尝试JNA而不是JNI:解决方案非常幼稚: 我不知道我需要用以下参数启动jvm:
-XstartOnFirstThread
我做到了,一切正常。解决方案非常幼稚: 我不知道我需要用以下参数启动jvm:
-XstartOnFirstThread
我做到了,一切正常