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
if ((missingImage != null) && (!missingImage.isDisposed())) {
                missingImage.dispose();
                missingImage = null;
            }
            /*
             * Stop the image cleaner thread, clear all of the weak references
             * and dispose of all of the images.
             */
            imageCleaner.stopCleaning();
            final Iterator imageItr = imageMap.entrySet().iterator();
            while (imageItr.hasNext()) {
                final Map.Entry entry = (Map.Entry) imageItr.next();
                final WeakReference reference = (WeakReference) entry.getKey();
                reference.clear();
                final Image image = (Image) entry.getValue();
                if ((image != null) && (!image.isDisposed())) {
                    image.dispose();
                }
            }
            imageMap.clear();
            /*
             * Stop the greyed image cleaner thread, clear all of the weak
             * references and dispose of all of the greyed images.
             */
            greyCleaner.stopCleaning();
            final Iterator greyItr = greyMap.entrySet().iterator();
            while (greyItr.hasNext()) {
                final Map.Entry entry = (Map.Entry) greyItr.next();
                final WeakReference reference = (WeakReference) entry.getKey();
                reference.clear();