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
}
				return;
			}
			if (widget instanceof MenuItem) {
				MenuItem mi = (MenuItem) widget;
				if (textChanged) {
					int accelerator = 0;
					String acceleratorText = null;
					IAction updatedAction = getAction();
					String text = null;
					
					accelerator = updatedAction.getAccelerator();
					
					/* Process accelerators on GTK in a special way to avoid
					 * Bug 42009.  We will override the native input method by
					 * allowing these reserved accelerators to be placed on the
					 * menu.  We will only do this for "Ctrl+Shift+[A-F]".
					 */
					ExternalActionManager.ICallback callback =
						ExternalActionManager.getInstance().getCallback();
					String commandId = updatedAction.getActionDefinitionId();
					if (SWT.getPlatform().equals("gtk")) { 
						if ((callback != null) && (commandId != null)) {
						    Integer commandAccelerator = callback.getAccelerator(commandId);
						    if (commandAccelerator != null) {
						        int accelInt = callback.getAccelerator(commandId).intValue();
						        if ((accelInt >= LOWER_GTK_ACCEL_BOUND) && (accelInt <= UPPER_GTK_ACCEL_BOUND)) {
						            accelerator = accelInt;
						            acceleratorText = callback.getAcceleratorText(commandId);
						        }