服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

j2me中建立splash启动界面


很显然,最简单的建立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,这样就不会重复调用了.

扫描关注微信公众号