Hello, The attached patch fixes two problems in RepaintManager. The first one is a direct cast from Toolkit to SunToolkit, without checking for the actual type, the second is using a SunToolkit static method without checking if we are actually using a SunToolkit. This makes it impossible to use a non-SunToolkit as AWT backend. The solution in the first case is to check for SunToolkit (of course) and in the 2nd case to also check for SunToolkit, and using a different method to post event to the EQ. This patch was developed as part of the Caciocavallo project and it would be good to have it merged it into mainline. What do you think?
/Roman -- Dipl.-Inform. (FH) Roman Kennke, Software Engineer, http://kennke.org aicas Allerton Interworks Computer Automated Systems GmbH Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany http://www.aicas.com * Tel: +49-721-663 968-48 USt-Id: DE216375633, Handelsregister HRB 109481, AG Karlsruhe Geschäftsführer: Dr. James J. Hunt
# HG changeset patch # User Mario Torre <[EMAIL PROTECTED]> # Date 1217450571 -7200 # Node ID 87fd234ed5ab0bac1ffa8731e80ded5830aa1684 # Parent 9af1670d56ecb4d3e49a21c9389c390e4c9e003f imported patch RepaintManager.patch diff -r 9af1670d56ec -r 87fd234ed5ab src/share/classes/javax/swing/RepaintManager.java --- a/src/share/classes/javax/swing/RepaintManager.java Wed Jul 30 22:42:51 2008 +0200 +++ b/src/share/classes/javax/swing/RepaintManager.java Wed Jul 30 22:42:51 2008 +0200 @@ -1261,9 +1261,12 @@ if (doubleBufferingEnabled && !nativeDoubleBuffering) { switch (bufferStrategyType) { case BUFFER_STRATEGY_NOT_SPECIFIED: - if (((SunToolkit)Toolkit.getDefaultToolkit()). - useBufferPerWindow()) { - paintManager = new BufferStrategyPaintManager(); + Toolkit tk = Toolkit.getDefaultToolkit(); + if (tk instanceof SunToolkit) { + SunToolkit stk = (SunToolkit) tk; + if (stk.useBufferPerWindow()) { + paintManager = new BufferStrategyPaintManager(); + } } break; case BUFFER_STRATEGY_SPECIFIED_ON: @@ -1285,9 +1288,16 @@ private void scheduleProcessingRunnable(AppContext context) { if (processingRunnable.markPending()) { - SunToolkit.getSystemEventQueueImplPP(context). - postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), - processingRunnable)); + Toolkit tk = Toolkit.getDefaultToolkit(); + if (tk instanceof SunToolkit) { + SunToolkit.getSystemEventQueueImplPP(context). + postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), + processingRunnable)); + } else { + Toolkit.getDefaultToolkit().getSystemEventQueue(). + postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), + processingRunnable)); + } } }