我試圖直接使用JNI從Java創建Qt主窗口,並且出現了線程錯誤。使用JNI從Java創建QMainWindow
我的代碼如下所示:
測試類:
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++ 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」方法的代碼,但沒有任何工作正常。
我知道我可以使用的佔碑......但我知道,它可能本身也做了,這就是我想要做的:)
在這個任何想法?提前致謝!
埃內斯托