【发布时间】:2010-05-17 05:01:40
【问题描述】:
我正在尝试直接使用 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();
}
}
TestWindow 类:
public class TestWindow
{
static { System.loadLibrary("mylib"); }
public native void show();
}
C++ 实现:
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 东西执行我的“显示”方法的代码,但没有任何工作正常。
我知道我可以使用 Jambi...但我知道它也可以在本地完成,这就是我想要做的 :)
对此有什么想法吗?提前致谢!
埃内斯托
【问题讨论】:
标签: java qt java-native-interface