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
b.setData(this);
			b.addListener(SWT.Dispose, getButtonListener());
			
			b.addListener(SWT.Selection, getButtonListener());
			if (action.getHelpListener() != null)
				b.addHelpListener(action.getHelpListener());
			widget = b;
			update(null);
			
			action.addPropertyChangeListener(propertyListener);
	        if (action != null) {
	            String commandId = action.getActionDefinitionId();
	            ExternalActionManager.ICallback callback = ExternalActionManager.getInstance()
	                    .getCallback();
	            if ((callback != null) && (commandId != null)) {
	                callback.addPropertyChangeListener(commandId, actionTextListener);
	            }
	        }
		}
	}
	/**
	 * The <code>ActionContributionItem</code> implementation of this
	 * <code>IContributionItem</code> method creates an SWT <code>MenuItem</code>
	 * for the action using the action's style. If the action's checked property has
	 * been set, a button is created and primed to the value of the checked
	 * property. If the action's menu creator property has been set, a cascading
	 * submenu is created.
	 */
	public void fill(Menu parent, int index) {
		if (widget == null && parent != null) {