Bug 62401 [Actions] ReferenceCleanerThread in ActionContributionItem cause application can not exit normally.
When the standalone application exit, the display disposed, will call ReferenceCleanerThread.stopCleaning() method, it simply set the running field to false, but "reference = referenceQueue.remove();" in line 196 still blocking. And you must call System.exit() explicitlly to terminate the currently running Java Virtual Machine. so I think it is a bug. My env: XP home edition, jdk 1.4.2_04, and eclipse-SDK-I20040514-win32 Regards, Eric
bundles/org.eclipse.jface/src/org/eclipse/jface/action/ActionContributionItem.java
final Image image = (Image) entry.getValue();
                if ((image != null) && (!image.isDisposed())) {
                    image.dispose();
                }
            }
            greyMap.clear();
        }
        /**
         * Returns the greyed image (i.e., disabled) for the given image
         * descriptor. This caches the result so that future attempts to get the
         * greyed image for the same descriptor will only access the cache. When
         * the last reference to the image descriptor is dropped, the image will
         * be cleaned up. This clean up makes no time guarantees about how long
         * this will take.
         * 
         * @param descriptor
         *            The image descriptor for which a greyed image should be
         *            created; may be <code>null</code>.
         * @return The greyed image, either newly created or from the cache.
         *         This value is <code>null</code> if the parameter passed in
         *         is <code>null</code>.
         */
        private final Image getGrayImage(final ImageDescriptor descriptor) {
            if (descriptor == null) { return null; }
            
            final HashableWeakReference key = new HashableWeakReference(
                    descriptor, imageReferenceQueue);
            final Object value = greyMap.get(key);
            if (value instanceof Image) {
                key.clear();