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
/**
             * @see Object#hashCode()
             */
            public final int hashCode() {
                final Object referent = get();
                if (referent == null) { return super.hashCode(); }
                return referent.hashCode();
            }
            /**
             * @see Object#equals(java.lang.Object)
             */
            public final boolean equals(Object object) {
                final Object referent = get();
                if (referent == null) { return super.equals(object); }
                if (object instanceof HashableWeakReference) {
                    object = ((HashableWeakReference) object).get();
                }
                return referent.equals(object);
            }
        }
        /**
         * A thread for cleaner up the reference queues as the garbage collector
         * fills them. It takes a map and a reference queue. When an item
         * appears in the reference queue, it uses it as a key to remove values
         * from the map. If the value is an image, then it is disposed. To
         * shutdown the thread, call <code>stopCleaning()</code>.
         * 
         * @since 3.0
         */
        private static class ReferenceCleanerThread extends Thread {