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