(J2ME) получить ссылку на мидлет из другого класса?

Я пытаюсь создать класс, который может устанавливать то, что находится на экране (например, установить форму для отображения, что угодно) вне класса мидлета (Main)
Итак, я подумал, что мне нужно ввести и изменить переменную Main display, но у меня вышла ошибка.

Вот вся программа:

//Main.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Main extends MIDlet {

    public Other othr = new Other(this);
    public Display display = Display.getDisplay(this);
    public void startApp() {
        display.setCurrent(othr);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}


//Other.java
import javax.microedition.lcdui.*;
public class Other extends Canvas{

    Form a = new Form("a");
    public TextEdit(Main mc){
        //HERE IT IS!
        mc.display.getDisplay(mc).setCurrent(a);
        //If I comment out the above, I get no error.

    }
    protected void paint(Graphics g) {
         //Nothing yet
    }

}

И я всегда получаю сообщение об ошибке «Приложение неожиданно завершило работу».

Я также попытался заменить mc.display.getDisplay(mc).setCurrent(a); на Display.getDisplay(mc).setCurrent(a);, тогда ошибка не отображается, но форма a вообще не отображается.

Вероятно, это будет глупая ошибка, но я потерялся

Что я могу сделать?


person SmRndGuy    schedule 24.04.2012    source источник


Ответы (2)


Это небольшая ошибка в вашем коде. Внесите изменения в свой код, как показано ниже.

//Main.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Main extends MIDlet {

    public Other othr ;
    public Display display ;
    public void startApp() {
         display= Display.getDisplay(this);
        othr=new Other(this);
        display.setCurrent(othr);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}

и проверьте, как выглядит ваш Другой, убедитесь, что то, что вы хотите, Form или Canvas - разные.

Для формы вашего кода, как это

//Other.java
import javax.microedition.lcdui.*;
public class Other {

    Form a ;
    public Other(Main mc){
        //HERE IT IS!
       a=new Form("a");
        Display.getDisplay(mc).setCurrent(a);
        //If I comment out the above, I get no error.

    }

}

Для Canvas проверьте это

/Other.java
import javax.microedition.lcdui.*;
public class Other extends Canvas{

     public Other(Main mc){
        //HERE IT IS!
        Display.getDisplay(mc).setCurrent(this);
        //If I comment out the above, I get no error.

    }
    protected void paint(Graphics g) {
         //Nothing yet
    }

}

Это поможет вам, Примечание :: Проверьте разницу между Canvas и Forms.

person Mr. Sajid Shaikh    schedule 25.04.2012
comment
Да, это было решение. вполне вероятно, что конструктор Other () запускается еще до того, как было создано отображение. Thakns - person SmRndGuy; 25.04.2012

Заменять

 public Other othr = new Other(this);
 public Display display = Display.getDisplay(this);

С участием

public Other othr;
public Display display;

public Main()
{
  othr = new Other(this);
  display = Display.getDisplay(this)
}
person Baba    schedule 24.04.2012