FileDocCategorySizeDatePackage
Toolkit.javaAPI DocAndroid 1.5 API43668Wed May 06 22:41:54 BST 2009java.awt

Toolkit

public abstract class Toolkit extends Object
The Toolkit class is the representation of the platform-specific Abstract Window Toolkit implementation. Toolkit's subclasses are used to bind the various components to particular native toolkit implementations.
since
Android 1.0

Fields Summary
private static final String
RECOURCE_PATH
The Constant RECOURCE_PATH.
private static final ResourceBundle
properties
The Constant properties.
Dispatcher
dispatcher
The dispatcher.
private EventQueueCore
systemEventQueueCore
The system event queue core.
EventDispatchThread
dispatchThread
The dispatch thread.
org.apache.harmony.awt.wtk.NativeEventThread
nativeThread
The native thread.
protected AWTEventsManager
awtEventsManager
The AWT events manager.
final Object
awtTreeLock
The AWT tree lock.
private final org.apache.harmony.awt.wtk.Synchronizer
synchronizer
The synchronizer.
final org.apache.harmony.awt.wtk.ShutdownWatchdog
shutdownWatchdog
The shutdown watchdog.
final AutoNumber
autoNumber
The auto number.
final AWTEvent.EventTypeLookup
eventTypeLookup
The event type lookup.
private boolean
bDynamicLayoutSet
The b dynamic layout set.
private final HashSet
userPropSet
The set of desktop properties that user set directly.
protected Map
desktopProperties
The desktop properties.
protected PropertyChangeSupport
desktopPropsSupport
The desktop props support.
private Object
recentNativeWindowComponent
For this component the native window is being created It is used in the callback-driven window creation (e.g. on Windows in the handler of WM_CREATE event) to establish the connection between this component and its native window.
private org.apache.harmony.awt.wtk.WTK
wtk
The wtk.
private final Object
lock
The lock.
Constructors Summary
public Toolkit()
Instantiates a new toolkit.

        init();
    
Methods Summary
public voidaddAWTEventListener(java.awt.event.AWTEventListener listener, long eventMask)
Adds an AWTEventListener to the Toolkit to listen for events of types corresponding to bits in the specified event mask. Event masks are defined in AWTEvent class.

param
listener the AWTEventListener.
param
eventMask the bitmask of event types.

        lockAWT();
        try {
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkPermission(awtEventsManager.permission);
            }
            awtEventsManager.addAWTEventListener(listener, eventMask);
        } finally {
            unlockAWT();
        }
    
public voidaddPropertyChangeListener(java.lang.String propName, java.beans.PropertyChangeListener l)
Adds the specified PropertyChangeListener listener for the specified property.

param
propName the property name for which the specified PropertyChangeListener will be added.
param
l the PropertyChangeListener object.

        lockAWT();
        try {
            if (desktopProperties.isEmpty()) {
                initializeDesktopProperties();
            }
        } finally {
            unlockAWT();
        }
        if (l != null) { // there is no guarantee that null listener will not be
            // added
            desktopPropsSupport.addPropertyChangeListener(propName, l);
        }
    
public abstract voidbeep()
Creates an audio beep.

static voidcheckHeadless()
A lot of methods must throw HeadlessException if GraphicsEnvironment.isHeadless() returns true.

throws
HeadlessException the headless exception.

        if (GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance())
            throw new HeadlessException();
    
public abstract intcheckImage(java.awt.Image a0, int a1, int a2, java.awt.image.ImageObserver a3)
Returns the construction status of a specified image that is being created.

param
a0 the image to be checked.
param
a1 the width of scaled image for which the status is being checked or -1.
param
a2 the height of scaled image for which the status is being checked or -1.
param
a3 the ImageObserver object to be notified while the image is being prepared.
return
the ImageObserver flags which give the current state of the image data.

public java.awt.CursorcreateCustomCursor(java.awt.Image img, java.awt.Point hotSpot, java.lang.String name)
Creates a custom cursor with the specified Image, hot spot, and cursor description.

param
img the image of activated cursor.
param
hotSpot the Point giving the coordinates of the cursor's hot spot.
param
name the cursor description.
return
the cursor with the specified Image, hot spot, and cursor description.
throws
IndexOutOfBoundsException if the hot spot values are outside the bounds of the cursor.
throws
HeadlessException if isHeadless() method of GraphicsEnvironment class returns true.

        lockAWT();
        try {
            int w = img.getWidth(null), x = hotSpot.x;
            int h = img.getHeight(null), y = hotSpot.y;
            if (x < 0 || x >= w || y < 0 || y >= h) {
                // awt.7E=invalid hotSpot
                throw new IndexOutOfBoundsException(Messages.getString("awt.7E")); //$NON-NLS-1$
            }
            return new Cursor(name, img, hotSpot);
        } finally {
            unlockAWT();
        }
    
org.apache.harmony.awt.wtk.NativeCursorcreateCustomNativeCursor(java.awt.Image img, java.awt.Point hotSpot, java.lang.String name)
Returns a shared instance of implementation of org.apache.harmony.awt.wtk.NativeCursor for current platform for custom cursor

param
img the img.
param
hotSpot the hot spot.
param
name the name.
return
new instance of implementation of NativeCursor.

        return wtk.getCursorFactory().createCustomCursor(img, hotSpot.x, hotSpot.y);
    
public abstract java.awt.ImagecreateImage(java.awt.image.ImageProducer a0)
Creates the image with the specified ImageProducer.

param
a0 the ImageProducer to be used for image creation.
return
the image with the specified ImageProducer.

public abstract java.awt.ImagecreateImage(byte[] a0, int a1, int a2)
Creates the image from the specified byte array, offset and length. The byte array should contain data with image format supported by Toolkit such as JPEG, GIF, or PNG.

param
a0 the byte array with the image data.
param
a1 the offset of the beginning the image data in the byte array.
param
a2 the length of the image data in the byte array.
return
the created Image.

public abstract java.awt.ImagecreateImage(java.net.URL a0)
Creates the image using image data from the specified URL.

param
a0 the URL for extracting image data.
return
the Image.

public abstract java.awt.ImagecreateImage(java.lang.String a0)
Creates the image using image data from the specified file.

param
a0 the file name which contains image data of supported format.
return
the Image.

org.apache.harmony.awt.wtk.NativeCursorcreateNativeCursor(int type)
Returns a shared instance of implementation of org.apache.harmony.awt.wtk.NativeCursor for current platform for.

param
type the Java Cursor type.
return
new instance of implementation of NativeCursor.

        return wtk.getCursorFactory().getCursor(type);
    
private org.apache.harmony.awt.wtk.WTKcreateWTK(java.lang.String clsName)
Creates the wtk.

param
clsName the cls name.
return
the wTK.

        WTK newWTK = null;
        try {
            newWTK = (WTK)Class.forName(clsName).newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return newWTK;
    
voiddispatchAWTEvent(java.awt.AWTEvent event)
Dispatch AWT event.

param
event the event.

        awtEventsManager.dispatchAWTEvent(event);
    
public java.awt.event.AWTEventListener[]getAWTEventListeners()
Gets the array of all AWT event listeners registered with this Toolkit.

return
the array of all AWT event listeners registered with this Toolkit.

        lockAWT();
        try {
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkPermission(awtEventsManager.permission);
            }
            return awtEventsManager.getAWTEventListeners();
        } finally {
            unlockAWT();
        }
    
public java.awt.event.AWTEventListener[]getAWTEventListeners(long eventMask)
Returns the array of the AWT event listeners registered with this Toolkit for the event types corresponding to the specified event mask.

param
eventMask the bit mask of event type.
return
the array of the AWT event listeners registered in this Toolkit for the event types corresponding to the specified event mask.

        lockAWT();
        try {
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkPermission(awtEventsManager.permission);
            }
            return awtEventsManager.getAWTEventListeners(eventMask);
        } finally {
            unlockAWT();
        }
    
public java.awt.DimensiongetBestCursorSize(int prefWidth, int prefHeight)
Returns the supported cursor dimension which is closest to the specified width and height. If the Toolkit only supports a single cursor size, this method should return the supported cursor size. If custom cursor is not supported, a dimension of 0, 0 should be returned.

param
prefWidth the preferred cursor width.
param
prefHeight the preferred cursor height.
return
the supported cursor dimension which is closest to the specified width and height.
throws
HeadlessException if GraphicsEnvironment.isHeadless() returns true.

        lockAWT();
        try {
            return wtk.getCursorFactory().getBestCursorSize(prefWidth, prefHeight);
        } finally {
            unlockAWT();
        }
    
public abstract java.awt.image.ColorModelgetColorModel()
Gets the color model.

return
the ColorModel of Toolkit's screen.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

java.awt.ComponentgetComponentById(long id)
Gets the component by id.

param
id the id.
return
the component by id.

        if (id == 0) {
            return null;
        }
        return null;
    
java.awt.FontgetDefaultFont()
Gets the default Font.

return
the default Font for Toolkit.

        return wtk.getSystemProperties().getDefaultFont();
    
public static java.awt.ToolkitgetDefaultToolkit()
Gets the default Toolkit.

return
the default Toolkit.

        synchronized (ContextStorage.getContextLock()) {
            if (ContextStorage.shutdownPending()) {
                return null;
            }
            Toolkit defToolkit = ContextStorage.getDefaultToolkit();
            if (defToolkit != null) {
                return defToolkit;
            }
            staticLockAWT();
            try {
                defToolkit = GraphicsEnvironment.isHeadless() ? new HeadlessToolkit()
                        : new ToolkitImpl();
                ContextStorage.setDefaultToolkit(defToolkit);
                return defToolkit;
            } finally {
                staticUnlockAWT();
            }
            // TODO: read system property named awt.toolkit
            // and create an instance of the specified class,
            // by default use ToolkitImpl
        }
    
public final java.lang.ObjectgetDesktopProperty(java.lang.String propName)
Gets the value for the specified desktop property.

param
propName the property name.
return
the Object that is the property's value.

        lockAWT();
        try {
            if (desktopProperties.isEmpty()) {
                initializeDesktopProperties();
            }
            if (propName.equals("awt.dynamicLayoutSupported")) { //$NON-NLS-1$
                // dynamicLayoutSupported is special case
                return Boolean.valueOf(isDynamicLayoutActive());
            }
            Object val = desktopProperties.get(propName);
            if (val == null) {
                // try to lazily load prop value
                // just for compatibility, our lazilyLoad is empty
                val = lazilyLoadDesktopProperty(propName);
            }
            return val;
        } finally {
            unlockAWT();
        }
    
public abstract java.lang.String[]getFontList()
Returns the array of font names which are available in this Toolkit.

return
the array of font names which are available in this Toolkit.
deprecated
use GraphicsEnvironment.getAvailableFontFamilyNames() method.

public abstract java.awt.FontMetricsgetFontMetrics(java.awt.Font font)
Gets the screen device metrics for the specified font.

param
font the Font.
return
the FontMetrics for the specified Font.
deprecated
Use getLineMetrics method from Font class.

protected abstract java.awt.peer.FontPeergetFontPeer(java.lang.String a0, int a1)
Gets the the Font implementation using the specified peer interface.

param
a0 the Font name to be implemented.
param
a1 the the font style: PLAIN, BOLD, ITALIC.
return
the FontPeer implementation of the specified Font.
deprecated
use java.awt.GraphicsEnvironment.getAllFonts method.

public org.apache.harmony.awt.wtk.GraphicsFactorygetGraphicsFactory()
Gets the GraphicsFactory.

return
the GraphicsFactory object.

        return wtk.getGraphicsFactory();
    
public abstract java.awt.ImagegetImage(java.lang.String a0)
Gets the image from the specified file which contains image data in a supported image format (such as JPEG, GIF, or PNG); this method should return the same Image for multiple calls of this method with the same image file name.

param
a0 the file name which contains image data in a supported image format (such as JPEG, GIF, or PNG).
return
the Image.

public abstract java.awt.ImagegetImage(java.net.URL a0)
Gets the image from the specified URL which contains image data in a supported image format (such as JPEG, GIF, or PNG); this method should return the same Image for multiple calls of this method with the same image URL.

param
a0 the URL which contains image data in a supported image format (such as JPEG, GIF, or PNG).
return
the Image.

public booleangetLockingKeyState(int a0)
Returns the locking key state for the specified key.

param
a0 the key code: VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, or VK_KANA_LOCK.
return
true if the specified key code is in the locked state, false otherwise.
throws
UnsupportedOperationException if the state of this key can't be retrieved, or if the keyboard doesn't have this key.
throws
NotImplementedException if this method is not implemented.

        lockAWT();
        try {
        } finally {
            unlockAWT();
        }
        if (true) {
            throw new RuntimeException("Method is not implemented"); //TODO: implement //$NON-NLS-1$
        }
        return true;
    
public intgetMaximumCursorColors()
Returns the maximum number of colors which the Toolkit supports for custom cursor.

return
the maximum cursor colors.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
            return wtk.getCursorFactory().getMaximumCursorColors();
        } finally {
            unlockAWT();
        }
    
public intgetMenuShortcutKeyMask()
Gets the menu shortcut key mask.

return
the menu shortcut key mask.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
            return InputEvent.CTRL_MASK;
        } finally {
            unlockAWT();
        }
    
org.apache.harmony.awt.wtk.NativeEventQueuegetNativeEventQueue()
Gets the native event queue.

return
the native event queue.

        return wtk.getNativeEventQueue();
    
public static java.lang.StringgetProperty(java.lang.String propName, java.lang.String defVal)
Gets the property with the specified key and default value. This method returns the defValue if the property is not found.

param
propName the name of property.
param
defVal the default value.
return
the property value.

        if (propName == null) {
            // awt.7D=Property name is null
            throw new NullPointerException(Messages.getString("awt.7D")); //$NON-NLS-1$
        }
        staticLockAWT();
        try {
            String retVal = null;
            if (properties != null) {
                try {
                    retVal = properties.getString(propName);
                } catch (MissingResourceException e) {
                } catch (ClassCastException e) {
                }
            }
            return (retVal == null) ? defVal : retVal;
        } finally {
            staticUnlockAWT();
        }
    
public java.beans.PropertyChangeListener[]getPropertyChangeListeners()
Returns an array of the property change listeners registered with this Toolkit.

return
an array of the property change listeners registered with this Toolkit.

        return desktopPropsSupport.getPropertyChangeListeners();
    
public java.beans.PropertyChangeListener[]getPropertyChangeListeners(java.lang.String propName)
Returns an array of the property change listeners registered with this Toolkit for notification regarding the specified property.

param
propName the property name for which the PropertyChangeListener was registered.
return
the array of PropertyChangeListeners registered for the specified property name.

        return desktopPropsSupport.getPropertyChangeListeners(propName);
    
public java.awt.InsetsgetScreenInsets(java.awt.GraphicsConfiguration gc)
Gets the screen insets.

param
gc the GraphicsConfiguration.
return
the insets of this toolkit.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        if (gc == null) {
            throw new NullPointerException();
        }
        lockAWT();
        try {
            return new Insets(0, 0, 0, 0); // TODO: get real screen insets
        } finally {
            unlockAWT();
        }
    
public abstract intgetScreenResolution()
Gets the screen resolution.

return
the screen resolution.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

public abstract java.awt.DimensiongetScreenSize()
Gets the screen size.

return
a Dimension object containing the width and height of the screen.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

final org.apache.harmony.awt.wtk.SynchronizergetSynchronizer()
Gets the synchronizer.

return
the synchronizer.

        return synchronizer;
    
public final java.awt.EventQueuegetSystemEventQueue()
Gets the system EventQueue instance. If the default implementation of checkAwtEventQueueAccess is used, then this results of a call to the security manager's checkPermission method with an AWTPermission("accessEventQueue") permission.

return
the system EventQueue instance.

        SecurityManager sm = System.getSecurityManager();
        if (sm != null) {
            sm.checkAwtEventQueueAccess();
        }
        return getSystemEventQueueImpl();
    
EventQueueCoregetSystemEventQueueCore()
Gets the system event queue core.

return
the system event queue core.

        return systemEventQueueCore;
    
protected abstract java.awt.EventQueuegetSystemEventQueueImpl()
Gets the EventQueue instance without checking access.

return
the system EventQueue.

final org.apache.harmony.awt.wtk.WTKgetWTK()
Gets the wTK.

return
the wTK.

        return wtk;
    
private static java.lang.StringgetWTKClassName()
Gets the wTK class name.

return
the wTK class name.

        return "com.android.internal.awt.AndroidWTK";
    
protected voidinit()
Initiates AWT.

        lockAWT();
        try {
            ComponentInternals.setComponentInternals(new ComponentInternalsImpl());
            new EventQueue(this); // create the system EventQueue
            dispatcher = new Dispatcher(this);
            final String className = getWTKClassName();
            desktopProperties = new HashMap<String, Object>();
            desktopPropsSupport = new PropertyChangeSupport(this);
            awtEventsManager = new AWTEventsManager();
            dispatchThread = new EventDispatchThread(this, dispatcher);
            nativeThread = new NativeEventThread();
            NativeEventThread.Init init = new NativeEventThread.Init() {
                public WTK init() {
                    wtk = createWTK(className);
                    wtk.getNativeEventQueue().setShutdownWatchdog(shutdownWatchdog);
                    synchronizer.setEnvironment(wtk, dispatchThread);
                    ContextStorage.setWTK(wtk);
                    return wtk;
                }
            };
            nativeThread.start(init);
            dispatchThread.start();
            wtk.getNativeEventQueue().awake();
        } finally {
            unlockAWT();
        }
    
protected voidinitializeDesktopProperties()
Initialize the desktop properties.

        lockAWT();
        try {
            wtk.getSystemProperties().init(desktopProperties);
        } finally {
            unlockAWT();
        }
    
public booleanisDynamicLayoutActive()
Checks if dynamic layout of Containers is active or not.

return
true, if is dynamic layout of Containers is active, false otherwise.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
            // always return true
            return true;
        } finally {
            unlockAWT();
        }
    
protected booleanisDynamicLayoutSet()
Returns if the layout of Containers is checked dynamically during resizing, or statically after resizing is completed.

return
true, if if the layout of Containers is checked dynamically during resizing; false, if the layout of Containers is checked statically after resizing is completed.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
            return bDynamicLayoutSet;
        } finally {
            unlockAWT();
        }
    
public booleanisFrameStateSupported(int state)
Checks if the specified frame state is supported by Toolkit or not.

param
state the frame state.
return
true, if frame state is supported, false otherwise.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
            return wtk.getWindowFactory().isWindowStateSupported(state);
        } finally {
            unlockAWT();
        }
    
protected java.lang.ObjectlazilyLoadDesktopProperty(java.lang.String propName)
Loads the value of the desktop property with the specified property name.

param
propName the property name.
return
the desktop property values.

        return null;
    
private static java.util.ResourceBundleloadResources(java.lang.String path)
Load resources.

param
path the path.
return
the resource bundle.

        try {
            return ResourceBundle.getBundle(path);
        } catch (MissingResourceException e) {
            return null;
        }
    
protected voidloadSystemColors(int[] colors)
Loads the current system color values to the specified array.

param
colors the array where the current system color values are written by this method.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
        } finally {
            unlockAWT();
        }
    
final voidlockAWT()
Lock AWT.

        synchronizer.lock();
    
public abstract java.util.MapmapInputMethodHighlight(java.awt.im.InputMethodHighlight highlight)
Returns a map of text attributes for the abstract level description of the specified input method highlight, or null if no mapping is found.

param
highlight the InputMethodHighlight.
return
the Map.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

java.util.MapmapInputMethodHighlightImpl(java.awt.im.InputMethodHighlight highlight)
Map input method highlight impl.

param
highlight the highlight.
return
the map.
throws
HeadlessException the headless exception.

        HashMap<java.awt.font.TextAttribute, ?> map = new HashMap<java.awt.font.TextAttribute, Object>();
        wtk.getSystemProperties().mapInputMethodHighlight(highlight, map);
        return Collections.<java.awt.font.TextAttribute, Object> unmodifiableMap(map);
    
voidonQueueEmpty()
On queue empty.

        throw new RuntimeException("Not implemented!");
    
booleanonWindowCreated(long winId)
Connect the component to its native window

param
winId the id of native window just created.

        return false;
    
public abstract booleanprepareImage(java.awt.Image a0, int a1, int a2, java.awt.image.ImageObserver a3)
Prepares the specified image for rendering on the screen with the specified size.

param
a0 the Image to be prepared.
param
a1 the width of the screen representation or -1 for the current screen.
param
a2 the height of the screen representation or -1 for the current screen.
param
a3 the ImageObserver object to be notified as soon as the image is prepared.
return
true, if image is fully prepared, false otherwise.

public voidremoveAWTEventListener(java.awt.event.AWTEventListener listener)
Removes the specified AWT event listener.

param
listener the AWTEventListener to be removed.

        lockAWT();
        try {
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkPermission(awtEventsManager.permission);
            }
            awtEventsManager.removeAWTEventListener(listener);
        } finally {
            unlockAWT();
        }
    
public voidremovePropertyChangeListener(java.lang.String propName, java.beans.PropertyChangeListener l)
Removes the specified property change listener registered for the specified property name.

param
propName the property name.
param
l the PropertyChangeListener registered for the specified property name.

        desktopPropsSupport.removePropertyChangeListener(propName, l);
    
protected final voidsetDesktopProperty(java.lang.String propName, java.lang.Object value)
Sets the value of the desktop property with the specified name.

param
propName the property's name.
param
value the property's value.

        Object oldVal;
        lockAWT();
        try {
            oldVal = getDesktopProperty(propName);
            userPropSet.add(propName);
            desktopProperties.put(propName, value);
        } finally {
            unlockAWT();
        }
        desktopPropsSupport.firePropertyChange(propName, oldVal, value);
    
public voidsetDynamicLayout(boolean dynamic)
Sets the layout state, whether the Container layout is checked dynamically during resizing, or statically after resizing is completed.

param
dynamic the new dynamic layout state - if true the layout of Containers is checked dynamically during resizing, if false - statically after resizing is completed.
throws
HeadlessException if the GraphicsEnvironment.isHeadless() method returns true.

        lockAWT();
        try {
            bDynamicLayoutSet = dynamic;
        } finally {
            unlockAWT();
        }
    
public voidsetLockingKeyState(int a0, boolean a1)
Sets the locking key state for the specified key code.

param
a0 the key code: VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, or VK_KANA_LOCK.
param
a1 the state - true to set the specified key code to the locked state, false - to unlock it.
throws
UnsupportedOperationException if the state of this key can't be set, or if the keyboard doesn't have this key.
throws
NotImplementedException if this method is not implemented.

        lockAWT();
        try {
        } finally {
            unlockAWT();
        }
        if (true) {
            throw new RuntimeException("Method is not implemented"); //TODO: implement //$NON-NLS-1$
        }
        return;
    
voidsetSystemEventQueueCore(EventQueueCore core)
Sets the system event queue core.

param
core the new system event queue core.

        systemEventQueueCore = core;
    
static final voidstaticLockAWT()
Static lock AWT.

        ContextStorage.getSynchronizer().lock();
    
static final voidstaticUnlockAWT()
Static unlock AWT.

        ContextStorage.getSynchronizer().unlock();
    
public abstract voidsync()
Synchronizes this toolkit's graphics.

final voidunlockAWT()
Unlock AWT.

        synchronizer.unlock();
    
final voidunsafeInvokeAndWait(java.lang.Runnable runnable)
InvokeAndWait under AWT lock. W/o this method system can hang up. Added to support modality (Dialog.show() & PopupMenu.show()) from not event dispatch thread. Use in other cases is not recommended. Still can be called only for whole API methods that cannot be called from other classes API methods. Examples: show() for modal dialogs - correct, only user can call it, directly or through setVisible(true) setBounds() for components - incorrect, setBounds() can be called from layoutContainer() for layout managers

param
runnable the runnable.
throws
InterruptedException the interrupted exception.
throws
InvocationTargetException the invocation target exception.

        synchronizer.storeStateAndFree();
        try {
            EventQueue.invokeAndWait(runnable);
        } finally {
            synchronizer.lockAndRestoreState();
        }