February 01, 2011
Mark Wielaard: New GPG key.
Finally created a new GPG key using gnupg. The old one was a DSA/1024 bits one and 8 years old. The new one is a RSA/2048 bits one. I will use the new one in the future to sign any release tarballs I might create. pub 2048R/57816A6A 2011-01-29 Key f...
More »
February 01, 2011
Andrew Hughes: [SECURITY] IcedTea6 1.7.8, 1.8.5, 1.9.5 Released!.
We are pleased to announce a new set of security releases, IcedTea6 1.7.8, IcedTea6 1.8.5 and IcedTea6 1.9.5.
This update contains the following security updates:
The IcedTea project provides a harness to build the source code from OpenJDK6 u...
More »
November/2024
Sun | Mon | Tue | Wed | Thu | Fri | Sat |
| | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | |
|
|
RepaintManager and Dirty Reads
The first rule of Swing programming is to always interact with Swing components in the Event Dispatch Thread (EDT, for short).nbsp; Swing is single-threaded (as a lot of UInbsp;toolkits are) and as such it can only makes guarantees about the state of Swing components when interacted with properly on the EDT.nbsp; Some Swing methods are thread-safe, such as JComponent.repaint.nbsp; Recently, I discovered that RepaintManager, the class that handles Swing painting (used by JComponent.repaint), can access a JComponent#039;s state off of the EDT.
The Problem
Here#039;s what happened. My company, to ensure that we do not violate the Swing prime directive, uses an aspect to interleave EDT checking code in our internal builds.nbsp; During one of our latest builds, we started seeing threading violations reported.nbsp; At first, we thought it was the new look and feel we were using doing something untoward, but it was simply calling JComponent.repaint() from an animation thread.nbsp; Digging into the internals of the RepaintManager, I found the following:
JComponent.repaint calls RepaintManager.addDirtyRegion.
RepaintManager.addDirtyRegion calls into the private implementation RepaintManager.addDirtyRegion0.
RepaintManager.addDirtyRegion0 calls JComponent methods without ensuring the calls happen on the EDT.
getWidth()
getHeight()
getParent()
isVisible()
The following class demonst...
Date: January, 19 2011
Url: http://www.java.net/blog/kschaefe/archive/2011/01/11/repaintmanager-and-dirty-reads
Others News
|