QPainter JNI调用崩溃了应用程序

时间:2010-12-20 05:53:16

标签: qt crash svg java-native-interface

我想做什么 - 对用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容器中运行。

1 个答案:

答案 0 :(得分:1)

有点解决了崩溃的问题。似乎是我在使用http://bugs.sun.com/view_bug.do?bug_id=5102720

的Java 1.5中的一个错误

我现在修改了它,通过为qmake添加这些标志来改变qt以弥补堆栈重新排列问题 -

QMAKE_CFLAGS += "-mstackrealign"
QMAKE_CXXFLAGS += "-mstackrealign"

问题主要出在Windows上。