QPainter JNI调用会导致应用程序崩溃
问题描述:
我在做什么 - 对用Qt编写的共享库进行JNI调用。在C++方面,我使用QPainter和QSvgRender来操作一个svg图像并返回一个简单的QImage。QPainter JNI调用会导致应用程序崩溃
QImage im;
QPainter painter;
if("image/svg+xml" == mimeType) {
QSvgRenderer svgrenderer(ar);
im = QImage(static_cast<int> (svgrenderer.defaultSize().width()),
static_cast<int> (svgrenderer.defaultSize().height()),
QImage::Format_ARGB32);
im = im.scaled(QSize(50,50), Qt::KeepAspectRatio);
im.fill(0);
painter.begin(&im);
svgrenderer.render(&painter); //Crashes here
}
问题是什么 - 同时呼吁呈现为所示的代码崩溃。它只会崩溃某些SVG图像。
如果我在独立的Qt应用程序中运行代码,它工作正常。 我没有在我的共享库中创建一个QApplication实例,而不是独立的Qt App。 所以我决定创建一个这样的方式 -
从Java主线程 - 产生另一个线程,使JNI调用来创建一个QApplication。运行exec()。
从Java Main Thread继续在QApplication初始化后进行其他JNI调用。
这仍然不起作用。任何建议我可能做错了什么是正确的方式来做我想做的事情? 我已经搜索论坛和网络的解决方案,但没有任何帮助。接近我需要的唯一线索是 - http://developer.qt.nokia.com/forums/viewthread/2283 [developer.qt.nokia.com]。
整个事情在基于java的web容器中运行。
答
种解决了崩溃的问题。似乎是在Java 1.5中的一个错误,我用http://bugs.sun.com/view_bug.do?bug_id=5102720
我有固定它现在通过改变Qt来弥补堆调整问题,通过增加这些标记为qmake-
QMAKE_CFLAGS += "-mstackrealign"
QMAKE_CXXFLAGS += "-mstackrealign"
问题主要是在窗户上。
难道你不能运行Qt代码作为外部命令行工具吗?以svg为参数并返回图像? – 2010-12-20 06:57:40
您是否尝试过创建不创建QApplication的简单独立Qt应用程序?如果不使用Java就会崩溃。下一步是在调试器中捕获这个崩溃并查看那里发生了什么。 – 2010-12-20 07:09:52