qt - QPainter JNI调用使应用程序崩溃

标签 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应用程序中运行代码,则可以正常工作。
与独立的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/

相关文章:

c++ - 'boost::Q_FOREACH' 尚未声明

c++ - QT (C++) 中的简单声音 (.wav) 播放应用程序

C++ 变量增量停止程序

ios - NSArray init 崩溃

javascript - snap.svg 在圆圈中移动对象

qt - 如何在 Qt 中解码 "application/x-qabstractitemmodeldatalist"以进行拖放?

c++ - 将 QtConcurrent 用于 QImage::fill 时 Unresolved 重载函数类型

xamarin - IOS 应用程序崩溃,甚至没有输入我的代码

javascript - 损坏的 javascript "display: none"与一些 SVG 结合在一起。不知道从哪里开始

javascript - 在 D3.js 中重新排序 SVG ( z-index ) 的元素