automidletimpl.java

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

JAVA
284
字号
/* *    * * 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.automation;/** * AutoMIDlet interface implementation. */final class AutoMIDletImpl implements AutoMIDlet {    /** MIDlet descriptor for this MIDlet */    private AutoMIDletDescriptorImpl midletDescriptor;    /** For tracking life cycle states */    private AutoStateTracker lifeCycleStateTracker;    /** For tracking background/foreground states */    private AutoStateTracker foregroundStateTracker;        /** For switching MIDlet state */    private static AutoMIDletStateController         midletStateController = null;    /** For switching MIDlet state */    private static AutoForegroundStateController         foregroundStateController = null;       /**     * Constructor.     *     * @param midletDescriptor MIDlet descriptor for this MIDlet     */    AutoMIDletImpl(AutoMIDletDescriptorImpl midletDescriptor) {        this.midletDescriptor = midletDescriptor;        this.lifeCycleStateTracker =             new AutoStateTracker(AutoMIDletLifeCycleState.PAUSED);        this.foregroundStateTracker =             new AutoStateTracker(AutoMIDletForegroundState.BACKGROUND);        if (midletStateController == null) {            midletStateController =                 AutoMIDletStateController.getMIDletStateController();        }        if (foregroundStateController == null) {            foregroundStateController =                 AutoForegroundStateController.getForegroundStateController();        }    }    /**     * To be called when MIDlet's life cycle state has changed.     *     * @param newState new life cycle state     */    void stateChanged(AutoMIDletLifeCycleState newState) {        boolean interruptWaiters = false;        if (newState == AutoMIDletLifeCycleState.DESTROYED) {            interruptWaiters = true;        }        lifeCycleStateTracker.setCurrentState(newState, interruptWaiters);                if (newState == AutoMIDletLifeCycleState.DESTROYED) {            foregroundStateTracker.interruptWait();            midletDescriptor.midletDestroyed();        }    }        /**     * To be called when MIDlet's foreground state has changed.     *     * @param newState new forgeround state     */    void stateChanged(AutoMIDletForegroundState newState) {        foregroundStateTracker.setCurrentState(newState, false);    }       /**     * Guarantees that MIDlet is not destroyed: if MIDlet     * is destroyed, exception is thrown.     *     * @param s error string     */    private void guaranteeMIDletNotDestroyed(String s)         throws IllegalStateException {                    if (lifeCycleStateTracker.getCurrentState() ==                 AutoMIDletLifeCycleState.DESTROYED) {            throw new IllegalStateException(s);        }    }    /**     * Guarantees that state transition is valid (possible):     * if state is unreachable, exception is thrown.     *     * @param state state to check for     * @param s error string     */    private void guaranteeStateTransitionIsValid(            AutoMIDletLifeCycleState state, String s)        throws IllegalStateException {        if (state != AutoMIDletLifeCycleState.DESTROYED) {            guaranteeMIDletNotDestroyed(s);        }    }        /**     * Guarantees that waiting for state is valid:      * if state is unreachable, exception is thrown.     *     * @param state state to check for     * @param s error string     */    private void guaranteeStateTransitionIsValid(            AutoMIDletForegroundState state, String s)        throws IllegalStateException {        guaranteeMIDletNotDestroyed(s);    }    /**     * AutoMIDlet implementation     */        /**     * Initiate a switch (transition) from current to specified      * lifecycle state.     *     * @param state state to switch to     * @param wait if true, wait (block) until transition to the      * specified state has been completed     * @throws IllegalStateException thrown when switching to specified     * state is invalid     */    public void switchTo(AutoMIDletLifeCycleState state, boolean wait)         throws IllegalStateException {                    synchronized (lifeCycleStateTracker) {            guaranteeStateTransitionIsValid(state, "switchTo");            midletStateController.switchTo(this, state);            if (wait) {                waitFor(state);            }        }            }        /**     * Initiate a switch (transition) from current to specified      * foreground state.     *     * @param state state to switch to     * @param wait if true, wait (block) until transition to the      * specified state has been completed     * @throws IllegalStateException thrown when switching to specified     * state is invalid     */    public void switchTo(AutoMIDletForegroundState state, boolean wait)         throws IllegalStateException {        synchronized (foregroundStateTracker) {            guaranteeStateTransitionIsValid(state, "switchTo");            foregroundStateController.switchTo(this, state);            if (wait) {                waitFor(state);            }        }    }    /**     * Wait (block) until MIDlet reaches specified lifecycle state.     *     * @param state state to wait for     * @throws IlegalStateException thrown if state to wait for is invalid,     * or if during waiting MIDlet has reached the state where waiting for     * specified state is no longer valid     */    public void waitFor(AutoMIDletLifeCycleState state)        throws IllegalStateException {                synchronized (lifeCycleStateTracker) {            guaranteeStateTransitionIsValid(state, "waitFor");                        // wait            lifeCycleStateTracker.waitFor(state);                        // wait might have been interrupted, so check again            // if waiting for this state is still valid            guaranteeStateTransitionIsValid(state, "waitFor");        }    }            /**     * Wait (block) until MIDlet reaches specified foreground state.     *     * @param state state to wait for     * @throws IlegalStateException thrown if state to wait for is invalid,     * or if during waiting MIDlet has reached the state where waiting for     * specified state is no longer valid     */    public void waitFor(AutoMIDletForegroundState state)        throws IllegalStateException {                    synchronized (foregroundStateTracker) {            guaranteeStateTransitionIsValid(state, "waitFor");                        foregroundStateTracker.waitFor(state);                        // wait might have been interrupted, so check again            // if waiting for this state is still valid            guaranteeStateTransitionIsValid(state, "waitFor");        }    }    /**     * Get current lifecycle state.     *     * @return AutoLifeCycleState representing current     * lifecycle state     */    public AutoMIDletLifeCycleState getLifeCycleState() {        synchronized (lifeCycleStateTracker) {            Object state = lifeCycleStateTracker.getCurrentState();            return (AutoMIDletLifeCycleState)state;         }    }        /**     * Get current foreground state.     *     * @return AutoForegroundState representing current     * foreground state     */    public AutoMIDletForegroundState getForegroundState() {        synchronized (foregroundStateTracker) {            Object state = foregroundStateTracker.getCurrentState();            return (AutoMIDletForegroundState)state;         }    }        /**     * Get MIDlet's descriptor.     *     * @return AutoMIDletDescriptor representing descriptor.     */    public AutoMIDletDescriptor getMIDletDescriptor() {        return midletDescriptor;    }}

⌨️ 快捷键说明

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