我要做什么 –对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应用程序中运行代码,则可以正常工作。
与独立的Qt App相比,我没有在共享库中创建QApplication实例。
因此,我决定以这种方式创建一个-
来自Java主线程–产生另一个线程,该线程进行JNI调用以创建QApplication。运行exec()。
在QApplication初始化之后,从Java主线程继续进行其他JNI调用。
这仍然行不通。关于我可能做错了什么以及做我想做的正确方法的任何建议?
我已经在论坛和网络上搜索了解决方案,但没有任何帮助。唯一接近我需要的线程是– http://developer.qt.nokia.com/forums/viewthread/2283 [developer.qt.nokia.com]。
整个过程在基于Java的Web容器中运行。
最佳答案
有点解决了崩溃的问题。似乎是我正在使用http://bugs.sun.com/view_bug.do?bug_id=5102720的Java 1.5中的错误
我现在已经通过更改qt来解决它,通过为qmake-添加这些标志来弥补堆栈重新对齐问题。
QMAKE_CFLAGS += "-mstackrealign"
QMAKE_CXXFLAGS += "-mstackrealign"
问题主要在Windows上。
关于qt - QPainter JNI调用使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4487250/