Midlet separada das listener

Olá pessoal!!!
Estou criando uma aplicação Midlet e quero deixar separado a classe visual, command e rms.Ou seja
uma classe irá tratar das listener outra da interfaçe e outra de tratar os dados.

public class Visual extends MIDlet {

TrataEventos trataEventos = new TrataEventos();
Display display;
Form formulario;
TextField textNome, textFone;

public Visual() {
    formulario = new Form("Agenda");
    formulario.addCommand(trataEventos.cmSair);
    formulario.setCommandListener(trataEventos);

    textNome = new TextField("Nome", "Digite seu nome", 50, TextField.ANY);
    textFone = new TextField("Número", "Digite seu número", 50, TextField.ANY);
}

public void startApp() {
    if (display == null) {
        display = Display.getDisplay(this);
        display.setCurrent(formulario);
    }
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

}

Essa é a classe visua

public class TrataEventos implements CommandListener{

Command cmSair = new Command("Sair", Command.EXIT, 0);
Command voltar = new Command("Voltar", Command.BACK, 0);
Command salvar = new Command("Salvar", Command.OK, 0);
Command novo = new Command("Novo", Command.OK, 0);
Command listar = new Command("Listar", Command.OK, 0);
Visual visual;

public void commandAction(Command c, Displayable d) {

    if (c == cmSair) {
        visual.destroyApp(true);
        visual.notifyDestroyed();
    }
}

}

e essa é a de comandos

a questão é que aparece o comando mas na hora de executar não faz nada.l