J2ME getDisplay()方法

时间:2012-03-04 05:10:52

标签: java java-me midp midlet lcdui

在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()作为参数传递,因为它是一个抽象类。

2 个答案:

答案 0 :(得分:4)

在代码d=Display.getDisplay(this);中,指的是当前Midlet。方法getDisplay()采用一个midlet参数。采用以下简单示例

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
       }
    }

答案 1 :(得分:3)

作为Android says d = Display.getDisplay(this)中的this; 指的是您的MIDlet。

但是当您编写以下内容时会出现错误

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

这是因为你试图通过它的构造函数创建MIDlet。你会看到MIDlet doc

  

受保护的MIDlet()       受保护的子类构造函数。应用程序管理软件负责创建MIDlet和创建MIDlet   受到限制。 MIDlet不应该尝试创建其他MIDlet。       抛出:       SecurityException - 除非应用程序管理软件正在创建MIDlet。