Exibindo uma Tela de Abertura em MIDlets (J2ME Splash Screen)

O momento de início para jogos/aplicações avançados de Java pode ser consideravelmente longo e cansativo, mas exibindo uma tela bem agradável de abertura do MIDlet a experiência do usuário geralmente pode ser melhor. Entretanto, pôde haver mais ao esse do que você pensa.
Se você tentasse simplesmente indicar a tela do abertura como parte de sua thread principal, pois pode incomodar com um problema ao perceber que o qua a tela de abertura não é exibida até que a seqüência inicialização do MIDlet esteja em andamento. Isto pode acontecer devido a presença dessas linhas de comandos:

public void startApp() {
   myDisplay.setCurrent(mySplashScreen);
   doAllSlowInitializations();
   myDisplay.setCurrent(myGameScreen);
}

A razão para este comportamento é que o gerenciador da aplicação não exibe nenhuma tela ou Canvas até que o startApp() retorne.
Mais info em MIDP-Javadoc do pacote javax.microedition.lcdui
A melhor dica é exibir a tela de abertura e inicializar o jogo em thread separadas, como mostrado no exemplo de código a seguir. Isto permitirá que o startApp() retorne rapidamente e a tela de abertura a ser indicada o mais cedo possível. As duas threads  poderiam simplesmente usar uma variável comum sincronizar quando a inicialização tiver terminada e então a tela do abertura irá simplesmente desaparecer (automaticamente).

public void startApp() {
   Thread splashScreenTest = new Thread(new SplashScreenTest.SplashScreen());
   splashScreenTest.start();
       
   Thread myGameThread = new Thread(this);
   myGameThread.start(); 
}

Outra, técnica geralmente usada para reduzir o tempo de inicialização é usar o carregamento preguiçoso (lazy loading), que significa que você espera até que se inicialize realmente os objetos e recursos a ponto de já estarem disponíveis para uso. Esta técnica pode também ter um impacto muito bom em casos com necessidades de memória do MIDlet, mas os riscos de começar uma aplicação assim devem ser considerados com cuidado.

Técnicas de Menu para MIDlets Profissionais (J2ME Professional Menu)

Serão exibidas duas técnicas de menu para tornar à aparência de seu MIDlet mais profissional e fácil de executar .

Bulleted Menu
Para um menu indicado, você pode usar qualquer imagem para indicar um item selecionado de um. Você até mesmo usar uma animação.

O menu bulleted é uma nova classe que faz análise das posições do indicador, disposição das opções no formulário, e das imagens para mostrar como parâmetros. Cada item do menu é associado com uma opção do formulário e imagem, mesmo que seja lançada uma exceção do displayable. Quando você seleciona um artigo, ao selecionar um item o controle é passado ao formulário (ou ao outro displayable), sendo ajustando com: display.setCurrent(displayables[pointerPos]).

Highlighted Menu
Para um menu destacado, não é um indicador que se mova de acordo com o item selecionado, mas a aparência do item selecionado muda para destacá-lo. Esta técnica requer um jogo de imagens para conseguir o efeito desejado. Você pode usar qualquer imagem para criar a aparência desejada.
Acessando a nova classe HighlightedMenu da mesma maneira que o BulletedMenu, onde foi feita a associação de displayables com os itens do menu. A diferença preliminar, obviamente, é como nós destacamos os itens. Dentro da rotina de destaque, nós extraímos primeiramente as escolhas do menu sem nenhum destacar. Então calculamos um retângulo que incluirá o item à destacar. Quando feita a extração, uma única imagem servirá para destaque de todos os itens diretamente sobre o menu não destacado (non-highlighted), o sistema exibi somente dentro do retângulo o destaque. O resultado será o destaque somente do item desejado.

Iteração rápido Para disposição em Canvas

Atravessar um vetor de elementos pode ser lento. Se usado o seguinte código:

for(int i=0; i<my_sprites.length; i++)
{
   my_canvas.draw(my_sprites[i]);
}

Este é código geralmente usado. Entretanto, não é otimizado. O comprimento é checado para se saber os limites de disposição. Acessando os índices do vetor no escopo (corpo) do laço faz-se também a verificação do limites de disposição:

try
{
   for(int i=0; ; i++)
   {
       my_canvas.draw(my_sprites[i]);
   }
}
catch (ArrayIndexOutOfBoundsException aioobe)
{
   // ignore; this just means that i has reached the end of the array
}

Obs.: Este princípio é aplicável aos comando dos vetores .size() and .getElementAt().