serialcallback.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 109 行

JAVA
109
字号
/* *   * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.util;import javax.microedition.lcdui.Display;/** * An adaptor class that lets a caller synchronize with the event thread. The * invokeAndWait() method enqueues an event using Display.callSerially() and * blocks the caller. When the event reaches the front of the queue, it calls * this object's run() method on the event thread, and unblocks the caller. * * Clients may override the run() method if they wish to provide specialized  * behavior that must be run on the event thread. If run() is not overridden,  * invokeAndWait() simply blocks until the event thread has processed the  * event. This is useful for callers that need to wait until after an event  * has been processed. * * The invokeAndWait() method must not be called on the event thread,  * otherwise the system will deadlock. */public class SerialCallback implements Runnable {    Display dpy;    Callback callback;    boolean done;    /**     * Constructs this callback object. Requires a Display object upon which      * the callSerially() method is to be invoked.     */    public SerialCallback(Display dpy) {        this.dpy = dpy;        callback = new Callback();    }        /**     * Blocks the caller until the events currently in the event queue have      * been processed, calls the run() method on the event thread, then      * unblocks the caller.     */    public synchronized void invokeAndWait() {        dpy.callSerially(callback);        done = false;        try {            while (!done) {                wait();            }        } catch (InterruptedException ignore) { }    }    /**     * Subclassers may override this if they wish to provide any specialized     * behavior.  The default implementation does nothing.     */    public void run() {    }    /**     * Called on the event thread when the callSerially event reaches the     * front of the queue. Calls the client's run() method and awakens the      * thread that had called invokeAndWait().     */    synchronized void called() {        run();        done = true;        notifyAll();    }    /**     * A nested class that provides a run() method to callSerially(), distinct      * from the run() method that can be overridden by clients.     */    class Callback implements Runnable {        public void run() {            called();        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?