Tela Congelando

Quando tento mudar de uma tela para outra ela simplesmente congela.
Tenho uma tela com imagem carregada, quando clico em um determinado botão para mudar para outra tela e carregar uma outra imagem a aplicação simplesmente para não tem nenhum erro.
Eu acho que o problema pode estar nesta parte do código:

this.append(Image.createImage(image, 0, image.length));
        this.setCommandListener(this);
        Display display = Display.getDisplay(this.midlet);
        display.setCurrent(null);
        display.setCurrent(this);
synchronized(this.midlet) {
            try {
                System.out.println("WAIT...");
                this.midlet.wait();
                System.out.println("FREEDOM");
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

O que está errado?

Não consegui ver o erro por essa parte do código descrita acima .

Sua MIDLET está implementando CommandListener certo??

se sim, então ela tem o metodo commandAction(Command c, Displayable d)

para fazer a transição de tela gealmente eu faço assim:

import javax.microedition.midlet.;
import javax.microedition.lcdui.
;

/**

  • @author rvinci
    */
    public class TestMidlet extends MIDlet implements CommandListener {

    private class MainMenu extends List {
    public MainMenu() {
    super(“Title”, List.IMPLICIT);
    append(“um”, null);
    append(“Two”, null);
    append(“Three”, null);
    append(“Four”, null);
    addCommand(exitCommand);
    }
    }

    private class SubMenu extends List {

     public SubMenu() {
         super("Sub Menu", List.IMPLICIT);
         append("Apple", null);
         append("Pear", null);
         append("Banana", null);
         addCommand(backCommand);
     }
    

    }
    private Display display;
    private MainMenu mainMenu = new MainMenu();
    private SubMenu subMenu = new SubMenu();

    public static final Command exitCommand =
    new Command(“Exit”, Command.EXIT, 1);
    public static final Command backCommand =
    new Command(“Back”, Command.BACK, 1);

    public TestMidlet() {
    }

    protected void destroyApp(boolean unconditional)
    throws MIDletStateChangeException {
    exitMIDlet();
    }

    public void exitMIDlet() {
    notifyDestroyed();
    }

    public Display getDisplay() {
    return display;
    }

    protected void initMIDlet() {
    mainMenu.setCommandListener(this);
    subMenu.setCommandListener(this);

     getDisplay().setCurrent(mainMenu);
    

    }

    protected void pauseApp() {
    }

    protected void startApp()
    throws MIDletStateChangeException {
    if (display == null) {
    display = Display.getDisplay(this);
    initMIDlet();
    }

    }

    public void commandAction(Command c, Displayable d) {
    if (d == mainMenu & c == exitCommand) {
    exitMIDlet();
    } else if (d == mainMenu & c == List.SELECT_COMMAND) {
    int item = mainMenu.getSelectedIndex();

         switch (item) {
             case 0:
                 getDisplay().setCurrent(subMenu);
                 System.out.println("Selecionou o primeiro");
                 break;
             case 1:
                 getDisplay().setCurrent(subMenu);
                 System.out.println("Selecionou o segundo");
                 break;
             case 2:
                 getDisplay().setCurrent(subMenu);
                 System.out.println("Selecionou o terceiro");
                 break;
             case 3:
                 getDisplay().setCurrent(subMenu);
                 System.out.println("Selecionou o quarto");
                 break;
         }
     } else if(d == subMenu & c == backCommand){
       display.setCurrent(mainMenu);
     }else if (d == subMenu & c == List.SELECT_COMMAND) {
         int item = subMenu.getSelectedIndex();
         switch (item) {
    
         case 0:
         display.setCurrent(mainMenu);
         System.out.println("Selecionou o primeiro do submenu");
         break;
    
         case 1:
         display.setCurrent(mainMenu);
         System.out.println("Selecionou o segundo do submenu");
         break;
    
         case 2:
         display.setCurrent(mainMenu);
         System.out.println("Selecionou o terceiro do submenu");
         break;
         }
     }
    

    }
    }

esse é um exemplo de transição de tela com um list, tenta implentar no seu projeto

pelo que eu entendi é isso que você está procurando

espero ter ajudado

Abraços

Eu acredito que o erro está nesta parte:

synchronized (this.midlet) {
            try {
                System.out.println("WAIT...");
                this.midlet.wait();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }

Parece que quando o setCurrent de Display é “setado” a tela não muda imediatamente, parece que tem um delay, pelo o que eu entendi, pode ser que esteja errado…
O problema que eu tenho que parar a aplicaçõa nesta tela e depois continuar quando um comando for disparado, como eu posso parar a aplicação e exibir uma determinada tela?

Vou colocar mais uma dúvida em relação ao wait.

Tenho uma classe MIDlet que no método startApp está assim:

public void startApp() {

   form = new Form("Image");
   form.append(image);
   Display.getDisplay(this).setCurrent(form);
   synchronized(this) {
            try {
                this.wait();
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
}

E no método destroyApp está igual, sendo que no destroyApp a “tela nova” não aparece e no startApp a tela aparece, alguém saberia por que?

[code]public void destroyApp() {

form = new Form(“Image”);
form.append(image);
Display.getDisplay(this).setCurrent(form);
synchronized(this) {
try {
this.wait();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}[/code]