1

我有一个 LWUIT 类,它有一个List,列表本身包含一个标签作为项目。

我的想法只是在我专注于标签时为列表执行操作。

编译类时出现以下错误:

匿名 Midlet$2 不是抽象的,并且不会覆盖 com.sun.lwuit.events.FocusListener 中的抽象方法 focusLost(com.sun.lwuit.Component)

String s = ("Focus me");
final com.sun.lwuit.Form f  = new com.sun.lwuit.Form();
final com.sun.lwuit.List D  = new com.sun.lwuit.List();
final com.sun.lwuit.Label l = new com.sun.lwuit.Label(s);

D.addItem(l);
f.addComponent(D);

D.addFocusListener(new com.sun.lwuit.events.FocusListener () {

    public void focusGained(com.sun.lwuit.Label l)
    {
    }
    public void focusLost(com.sun.lwuit.Label l)
    {
    }

});
4

1 回答 1

4

您的代码有什么问题的所有详细信息都在错误消息中,您只需要仔细阅读即可。看,

  1. wordanonymous和 sign $inMidlet$2告诉你匿名类有问题。
    在您的代码片段中,只有一个这样的类:new com.sun.lwuit.events.FocusListener

  2. does not override abstract method focusLost(com.sun.lwuit.Component)意味着您的匿名类错过了具有此类签名的方法的定义(签名是方法名称和参数类型)

  3. 仔细查看您在该匿名类中定义的方法,是否有方法编译器在抱怨?

  4. 乍一看,你可能会认为它在那里,有一个方法叫做focusLost- 但是(!)你需要记住签名不仅是方法名称,而且是参数类型 - 和(!)如果你仔细观察,你会发现出那个参数类型不是说在错误消息中是必需的。

您的匿名类有方法focusLost(com.sun.lwuit.Label),但错误消息说应该有具有不同签名(不同参数类型)的方法 - focusLost(com.sun.lwuit.Component)

要修复此编译错误,请向匿名类添加new com.sun.lwuit.events.FocusListener一个具有所需签名的方法:focusLost(com.sun.lwuit.Component).

于 2013-05-01T10:42:44.150 回答