2010-12-20 101 views
2

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

+0

难道你不能运行Qt代码作为外部命令行工具吗?以svg为参数并返回图像? – 2010-12-20 06:57:40

+0

您是否尝试过创建不创建QApplication的简单独立Qt应用程序?如果不使用Java就会崩溃。下一步是在调试器中捕获这个崩溃并查看那里发生了什么。 – 2010-12-20 07:09:52

回答

1

种解决了崩溃的问题。似乎是在Java 1.5中的一个错误,我用http://bugs.sun.com/view_bug.do?bug_id=5102720

我有固定它现在通过改变Qt来弥补堆调整问题,通过增加这些标记为qmake-

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

问题主要是在窗户上。

相关问题