Dei uma olhada no código do NetBeans para gerar um Splash screen para meu aplicativo J2ME. Mas o código é tão extenso e eu fiquei pensando: tudo isso só para pôr uma imagem na tela por alguns segundos?
Porque não se pode apenas carregar uma imagem e fazer o clássico:
publicclassExMIDletextendsMIDletimplementsCommandListener{//construtorpublicExMIDlet(){}protectedvoiddestroyApp(boolean unconditional) throws MIDletStateChangeException {exitMIDlet();}protectedvoidpauseApp(){}protectedvoidstartApp(){Displayablecurrent=Display.getDisplay(this).getCurrent();if(current == null){//current=vazio,aplicacaoiniciandohoradeexibirasplashscrrenSplashScreensplashScreen=newSplashScreen(this, mainMenu);Display.getDisplay(this).setCurrent(splashScreen);splashScreen.start();}voidstart(){if(timer != null)timer.cancel();}timer=newTimer();TimerTaskdismissTask=newTimerTask(){publicvoidrun(){if(timer != null)//Cancelaotimer(timer.cancel()) e exibe a prox tela de acordo c/ o Construtordismiss();}};//terminacomosplashdepoisde4segstimer.schedule(dismissTask, 4000L);
importjava.io.IOException;importjava.util.*;importjavax.microedition.lcdui.*;publicclassSplashScreenextendsCanvas{privateDisplaydisplay;privateDisplayablenext;privateImageresim=null;// imagem a ser exibidaprivateTimertimer=newTimer();publicSplashScreen(Displaydisplay,Displayablenext){this.display=display;this.next=next;display.setCurrent(this);}protectedvoidkeyPressed(intkeyCode){dismiss();}protectedvoidpaint(Graphicsg){try{g.setColor(255,255,255);g.drawRect(0,0,getWidth(),getHeight());resim=Image.createImage("/res/logo.png");g.drawImage(resim,getWidth()/2,getHeight()/2,Graphics.HCENTER|Graphics.VCENTER);}catch(IOExceptionex){System.out.println("logo não localizado!"+ex.toString());}}protectedvoidpointerPressed(intx,inty){dismiss();}// tempo do splash: 5 segsprotectedvoidshowNotify(){timer.schedule(newCountDown(),5000);}// cancela splash ao pressionar qualquer butão após os 5 segsprivatevoiddismiss(){timer.cancel();display.setCurrent(next);}privateclassCountDownextendsTimerTask{publicvoidrun(){dismiss();}}}
em seguida o pode chamar o menu após a splash screen
Aproveitando o gancho…
Tenho uma Thread q. conecta no servidor lê um arquivo e popula o banco…
o que acontece é q. a SplashScreen termina antes…(sei q. é configurável o tempo!)…
Pergunta! Teria como passar o tempo para o SplashScreen de acordo com o tempo de duração do processo?
entenderam? Tipo…quero q. a splash dure o tempo que a thread durar…
Ou algo do tipo...
Não acho que dê pra saber o tempo do processamento antes dele ocorrer. Talvez fazer uma estimativa pela quantidade de dados a se trafegado, mas não tenho certeza!
D
DianaPJ
hum…é eu já tinha pensando em algo desse tipo…vou testar!
Outra coisa, sabes como eu mantenho a aplicação aberta?
Tipo…abri minha aplicação (palm) e deixei atualizando o bd…eqto isso vou para a home do palm…e continuo trabalhando em outras coisas…
qdo eu tento retornar para aplicação (clicando no ícone)…ela abre novamente!
Será q. tem alguma propriedade ou coisa do tipo, onde eu informe para verificar se existe uma instancia…e caso exista…não abrir novamente…
A short ‘hot’ key press is used for switching between running apps.
Upon a short ‘hot’ key press the foreground MIDlet will be
placed in the background and the main device menu will be
displayed on the screen.
Upon a long ‘Hot’ key press the foreground MIDlet will be
placed in the background and the ‘Application manager’ will
be displayed on the screen. The user can see the list of running apps and can switch to another app.
Upon calling setCurrent(null) the MIDlet will be placed in the
background and the ‘idle’ screen of the device will be
displayed. This enables MIDlets to place themselves in the background.