Here's a broken down report on other qt-peer design issues: I compiled classpath from CVS with: ------------------------------------------------------------------- $ MOC=/usr/bin/moc-qt4 \ ECJ=/usr/bin/ecj-gcj \ ./configure \ --prefix=`pwd`/dist \ --enable-xmlj \ --enable-dependency-tracking \ --enable-maintainer-mode \ --enable-qt-peer \ --enable-gtk-cairo \ --disable-libtool-lock \ --disable-rpath \ --enable-examples \ --with-gnu-ld \ --with-ecj \ --with-gcj ------------------------------------------------------------------- and jamvm 1.4.2 with: ------------------------------------------------------------------- $ ./configure \ --prefix=/usr/src/classpath/dist \ --enable-ffi \ --with-classpath-install-dir=/usr/src/classpath/dist \ --disable-int-threading ------------------------------------------------------------------- I tried that "--disable-int-threading" to circumvent the Qt-GUI-Classes-aren't-thread-safe problem I reported earlier, but somehow this didn't solve the problem. I get the same problem with and without this. Ok, now I start the app ... ------------------------------------------------------------------- $ dist/bin/jamvm \ -Dawt.toolkit=gnu.java.awt.peer.qt.QtToolkit \ -cp examples/examples.zip \ gnu.classpath.examples.awt.Demo ------------------------------------------------------------------- and get lot's of warning. Here's a run-down: ------------------------------------------------------------------- QFont: It is not safe to use text and fonts outside the gui thread ------------------------------------------------------------------- See my earlier mail, http://developer.classpath.org/pipermail/classpath/2006-February/000069.html ------------------------------------------------------------------- QPainter::begin(), paintdevice returned engine == 0, type: 3 ------------------------------------------------------------------- That's from Qt's src/gui/painting/qpainter.cpp, the code here is d->device = pd; d->engine = pd->paintEngine(); if (!d->engine) { qWarning("QPainter::begin(), paintdevice returned engine == 0, type: %d\n", pd->devType()); return true; } near the start of the QPainter::begin(QPaintDevice *pd) method. Trolltech says "The QPaintDevice class is the base class of objects that can be painted" and "QPainter can operate on any object that inherits the QPaintDevice class.". That means that here someone called QPainter::begin with a paintdevice that didn' have a PaintEngine filled in. Bad, bad, bad. ------------------------------------------------------------------- Painter must be active to set rendering hints ------------------------------------------------------------------- Here someone called QPainter::setRenderHint() without a prior call to QPainter::begin(). This is bad, since you a) can only paint after calling QPainter::begin() and Trolltech states as a description for this method: " Notice that all painter settings (setPen(), setBrush() etc.) are reset to default values when begin() is called.". So setting renderhints outside of a begin() and then later calling begin() wouldn't achive the desired effect. ------------------------------------------------------------------- QPainter::setMatrix(), painter not active ------------------------------------------------------------------- Dito. I can also let the qt-peer rendered Example app crash by intent: I first start the app, then I click the "Random test" button, then the X-button of the window to close the window and then the the "RoundRect" button. And voula, a crash.