Метод J2ME getDisplay ()

В J2ME для создания объекта класса Display мы используем

private Display d;
d=Display.getDisplay(this);

Что такое this как параметр?

Я знаю, что это относится к текущему экземпляру, но когда я пишу следующее, я получаю ошибки

d=Display.getDisplay(new MyClassName());

Когда я увидел в книге, метод был написан, как показано ниже

static Display getDisplay(MIDlet midlet)

Итак, я попробовал это

MIDlet m;
d=Display.getDisplay(m);

Но у меня возникают ошибки, и я даже не могу передать new MIDlet() в качестве параметра, поскольку это абстрактный класс.


person Rameshwar.S.Soni    schedule 04.03.2012    source источник


Ответы (2)


Как указано в Android, this в d = Display.getDisplay (this); < / strong> относится к вашему мидлету.

Но когда вы пишете следующее, вы получаете ошибки

d=Display.getDisplay(new MyClassName());   

Это потому, что вы пытаетесь создать мидлет с помощью его конструктора. Вы бы увидели Документ MIDlet:

protected MIDlet () Защищенный конструктор для подклассов. Программное обеспечение для управления приложениями отвечает за создание мидлетов, и создание мидлетов ограничено. MIDlet не должны пытаться создавать другие MIDlet. Выдает: SecurityException - если программное обеспечение для управления приложениями не создает мидлет.

person hasanghaforian    schedule 04.03.2012

В коде d=Display.getDisplay(this); this относится к текущему мидлету. Метод getDisplay() принимает один аргумент мидлета. Возьмем следующий простой пример

public class MyMidlet extends Midlet
{
    private Display display;

   public MyMidlet()
   {
       display = Display.getDisplay(this);  // Here this refers to the current class's Midlet
   }
}

Теперь предположим, что у вас есть обычный файл класса, как показано ниже,

public class MyClass
{
    private Display display;
    Midlet m;

   public MyClass()
   {
       display = Display.getDisplay(m);  // You can not do this directly.
   }
}

если вам нужен приведенный выше сценарий, вам может потребоваться изменить свой код, как показано ниже, предположим, что у вас есть оба класса в одном пакете.

// Midlet Class 
    public class MyMidlet extends Midlet
    {
        private MyClass mycls;
        public void myMethod ()
        {
           mycls = MyClass(this); // Passing Midlet reference to MyClass's constructor.
        }
        ....
        ....
        ....
    }


// another class file 
    public class MyClass
    {
        private Display display;
        Midlet m;

       public MyClass( Midlet m )
       {
        this.m = m;
        display = Dispaly.getDisplay(m);  // Now it will work
       }
    }
person Lucifer    schedule 04.03.2012
comment
@Android ---- У меня есть только один класс, расширяющий мидлет (т.е. у меня нет нормального класса), и я хотел спросить, могу ли я каким-либо образом заменить этот параметр в качестве параметра метода getDisplay (). В вашем примере вы использовали 2 класса, что не в моем случае. - person Rameshwar.S.Soni; 04.03.2012