很显然,最简单的建立Splash启动界面的方法是用Alert ,在应用程序启动的时候用Alert 显示启动信息和图片一段时间直到应用程序启动完成.因此用Alert 做启动界面是非常简单的,具体实现方法可参考如下代码: 
  public void showSplashScreen(                       Display d, Displayable next ){    Image logo = null;          try {      logo = Image.createImage(                               "/images/logo.png" );     }     catch( IOException e ){    }          Alert a = new Alert( "Time Tracker",             "Copyright 2001 by Nobody, Inc.",             logo, null );      a.setTimeout( Alert.FOREVER );     display.setCurrent( a, next ); } 
  
  
不过使用Alert 也许不能满足您灵活的需要,比如需要用任何按钮取消Splash , 或者显示一个简单的动画 .这个时候,我们可以用Canvas 来代替Alert .请参见如下代码: 
  import java.util.*; import javax.microedition.lcdui.*;   public class SplashScreen extends Canvas {    private Display     display;     private Displayable next;     private Timer       timer = new Timer();       public SplashScreen(                 Display display, Displayable next ){        this.display = display;         this.next    = next;           display.setCurrent( this );     }       protected void keyPressed( int keyCode ){        dismiss();     }       protected void paint( Graphics g ){        // do your drawing here     }       protected void pointerPressed( int x, int y ){        dismiss();     }       protected void showNotify(){        timer.schedule( new CountDown(), 5000 );     }       private void dismiss(){        timer.cancel();         display.setCurrent( next );     }       private class CountDown extends TimerTask {        public void run(){            dismiss();         }     } } 
  
  
       为了显示这个Splash界面,为他建立一个实例 当你建立一个SplashScreen的实例,把它传递给MIDlet的显示类, 你也可以在Splash界面释放的时候把Display激活. 
  public void showSplashScreen(                 Display display, Displayable next ){    new SplashScreen( display, next ); } 
  
这个例子,无论是用户按下了任意键或者点击了屏幕(如果设备支持触摸屏的的化),如果什么事件也没有发生,Splash屏幕将在第一次显示5秒后消失. 
  
       我们在程序中什么时候显示Splash呢?你也许会想到在MIDlet的startApp方法的最后一行显示Splash,但请记住,startApp方法在一次进程中有可能被调用多次,构造函数中也不是一个显示Splash的好地方,因为MIDP的规范中没有保证在构造的时候初始化Display 对象 .所以startApp 是可以显示Splash的地方,不过一定要注意,只能够显示一次. 同时startApp中也是可以安全获取到Display对象 , 所以结合以上两点,见如下代码: 
  import javax.microedition.lcdui.*; import javax.microedition.midlet.*;   public class MyMIDlet extends MIDlet                       implements CommandListener {      private Display display;     private Command exitCommand = new Command(                           "Exit", Command.EXIT, 1 );       public MyMIDlet(){    }       protected void destroyApp(       boolean unconditional )                throws MIDletStateChangeException {        exitMIDlet();     }       protected void pauseApp(){    }       protected void startApp()                  throws MIDletStateChangeException {        if( display == null ){                            // first time called...             initMIDlet();         }     }       private void initMIDlet(){        display = Display.getDisplay( this );         new SplashScreen(                        display, new TrivialForm() );     }       public void exitMIDlet(){        notifyDestroyed();     }       public void commandAction(                          Command c, Displayable d ){        exitMIDlet();     }       // A trivial UI screen       class TrivialForm extends Form {        TrivialForm(){            super( "MyMIDlet" );             addCommand( exitCommand );             setCommandListener( MyMIDlet.this );         }     } } 
  
  
在MIDlet程序中,并非每次客户启动程序都要显示Splash , 你应该在用户第一次启动MIDlet的时候显示Splash , 下次用户再启动的时候就不要再显示了. 为此,你可以用记录管理系统(RMS) 存储程序是否已经被调用的标识, 只有当RMS中没有该标识的时候才显示Splash ,当显示完Splash 后你就把标识写入RMS,这样就不会重复调用了.  
 
  |