我想做什么 - 对用Qt编写的共享库进行JNI调用。在C ++方面,我使用QPainter和QSvgRender来操作svg图像并返回一个简单的QImage。
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
}
问题是什么 - 代码在调用render时崩溃,如图所示。并且它仅针对某些SVG图像崩溃。
如果我在一个独立的Qt应用程序中运行代码,它可以正常工作。 我没有在共享库中创建一个QApplication实例,而不是独立的Qt App。 所以我决定用这种方式创建一个 -
来自Java主线程 - 产生另一个进行JNI调用以创建QApplication的线程。运行exec()。
从Java主线程继续在初始化QApplication之后进行其他JNI调用。
这仍然不起作用。关于我可能做错什么的建议以及做我想做的事的正确方法是什么? 我在论坛和网络上搜索了解决方案但没有任何帮助。接近我需要的唯一主题是 - http://developer.qt.nokia.com/forums/viewthread/2283 [developer.qt.nokia.com]。
整个事情都在基于java的Web容器中运行。
答案 0 :(得分:1)
有点解决了崩溃的问题。似乎是我在使用http://bugs.sun.com/view_bug.do?bug_id=5102720
的Java 1.5中的一个错误我现在修改了它,通过为qmake添加这些标志来改变qt以弥补堆栈重新排列问题 -
QMAKE_CFLAGS += "-mstackrealign"
QMAKE_CXXFLAGS += "-mstackrealign"
问题主要出在Windows上。