Exibir tela que não está na classe que herda de midlet [RESOLVIDO]

Boa tarde pessoal…

Seguinte, tenho uma dúvida que já tentei resolver de diversas maneiras mas não estou conseguindo de forma alguma…eu tenho essa classe que é meu midlet:

[code]
public class ControleDeGastos extends MIDlet implements CommandListener /,ItemStateListener/ {

static  Display display;
private Form frm_principal, frm_cadastro;
private ChoiceGroup cg_funcoes, cg_categorias;
private Command cm_sair, cm_info, cm_ok, cm_salvar, cm_voltar, cm_apagar;
private TextField tf_data, tf_hora, tf_valor, tf_descricao;
private List lstNomes;
private RecordStore rsGastos; //gravação
private RecordEnumeration reGastos; //navegação
private Vector vetIds = new Vector();
private static ControleDeGastos inst;
private Principal principal;

public void startApp() {

    display = Display.getDisplay(this);
    principal = new Principal(this);
   display.setCurrent(principal);


}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

}[/code]

E tenho a seguinte classe que seria a tela principal do meu aplicativo:



public class Principal extends Form /*implements CommandListener*/{

    private PrincipalCommand pc;
    private ChoiceGroup cg_funcoes;
    protected Command cm_sair, cm_info, cm_ok,cm_apagar;
    private List lstNomes;
    private ControleDeGastos app;

    Principal(ControleDeGastos app) {
        super("Menu");
        this.app = app;

        //lstNomes = new List("Agenda", List.EXCLUSIVE);

        cg_funcoes = new ChoiceGroup("Menu de funcionalidades", ChoiceGroup.EXCLUSIVE, new String[]{"Registrar Gasto", "Gasto Total", "Gasto Semanal", "Gasto Diário", "Gasto por Categoria",
                    "Gasto Semanal por Categoria", "Apagar Registros"}, null);

        cm_sair = new Command("Sair", Command.EXIT, 0);
        cm_info = new Command("Info", Command.ITEM, 0);
        cm_ok = new Command("Confirmar", Command.ITEM, 1);

        cm_apagar = new Command("Deletar", Command.ITEM, 1);
       //lstNomes.addCommand(cm_apagar);

        this.append(cg_funcoes);
        this.addCommand(cm_sair);
        this.addCommand(cm_ok);
        this.addCommand(cm_info);
        this.setCommandListener(pc);
    }

Eu gostaria de saber como faço pra na minha classe midlet eu chamar o form que eu estou fazendo nessa classe principal pra exibir ele…
Não esotu conseguindo galera…por favor me ajudem

Abraços

Editado - não vai ajudar…

Blz, eu sou meio novato na história, mas dá uma olhada se te ajuda

public void startApp() {

        if (midletPaused) {
            resumeMIDlet ();

        } else {
            initialize ();
            startMIDlet ();
        }

        midletPaused = false;
    }


private void initialize() {

      // Por padrão chama o startMidlet()  

    }

public void startMIDlet() {

        switchDisplayable(null, getFmPrincipal());  //método q chama a tela principal
        
    }


public  getFmPrincipal() {

//constrói todo teu form e retorna ele

return fmPrincipal

}

Editado - Respondi besteira não herda da midlet…

A princípio deveria estar funcionando.
Já tentou criar um atributo de Form na sua Midlet e setar ela no seu display para ver se ela exibe?

Realmente acho que o problema estava no netbeans pois eu cheguei a criar um novo projeto e funcionou…agora estou com uma dúvida…na minha classe “Principal” eu uso por exemplo this.append(…) como eu faço pra dizer que é essa própria classe que vai tratar seus commands ? pois eu tentei usasr this.setCommandListener(this) e não funciona…alguém tem uma idéia ?

Pessoal consegui resolver porém me surgiu outra dúvida:

Eu fazendo o seguinte:


public class Principal extends Form implements CommandListener {

    private ChoiceGroup cg_funcoes;
    protected Command cm_sair, cm_ok, cm_apagar;
    private List lstNomes;
    private ControleDeGastos app;
    private CadastraGasto cadastragastos;

    Principal(ControleDeGastos app) {
        super("Menu");
        this.app = app;

        lstNomes = new List("Agenda", List.EXCLUSIVE);

        cg_funcoes = new ChoiceGroup("Menu de funcionalidades", ChoiceGroup.EXCLUSIVE, new String[]{"Registrar Gasto", "Gasto Total", "Gasto Semanal", "Gasto Diário", "Gasto por Categoria",
                    "Gasto Semanal por Categoria", "Apagar Registros"}, null);

        cm_sair = new Command("Sair", Command.EXIT, 0);
        cm_ok = new Command("Confirmar", Command.ITEM, 1);

        cm_apagar = new Command("Deletar", Command.ITEM, 1);
        lstNomes.addCommand(cm_apagar);

        this.append(cg_funcoes);
        this.addCommand(cm_sair);
        this.addCommand(cm_ok);

        this.setCommandListener(this);

    }

    public void commandAction(Command c, Displayable d) {
        if (c == cm_ok) {
            int opcao = cg_funcoes.getSelectedIndex() + 1;
            System.out.println("Opção selecionada: " + opcao);
            if (opcao == 1) {
                app.trocaTela(1);
                System.out.println("enviei a opção 1");
            }
        }

    }
}

Eu fiz o teste e quando eu chamo ele realmente cai dentro das condições do meu método trocarTela que está assim:


  public void trocaTela(int tela)
    {
        switch(tela)
        {
            case 0:
                display.setCurrent(principal);
                break;
            case 1:
                System.out.println("Cai no case1");
                cadastragasto = new CadastraGasto(this);
                display.setCurrent(cadastragasto);
                break;
            default:
                display.setCurrent(principal);
        }
    }

porem acusa:

java.lang.NullPointerException
at javax.microedition.lcdui.Displayable.addCommand(Displayable.java:300)
at br.ufpr.tis.CadastraGasto.(+240)
at br.ufpr.tis.ControleDeGastos.trocaTela(ControleDeGastos.java:199)
at br.ufpr.tis.Principal.commandAction(Principal.java:49)

Alguém sabe o motivo desse erro ?

Tem certeza que o display foi inicializado?

j0nny depois de muit oquebrar a cabeça tive a simples idéia de colocar um try caatch pra tentar caçar o erro e depois de passar oso lhos 1000 vezes por cima do erro consegui identifica-lo: eu declarava um command e adicionava ele ao meu form mas o que eu não prestei atenção é que em algum momento eu decidi não usar esse command e tirei a parte onde crio sua instancia…por isso do null pointer exception

Vlw demais pela ajuda