2013-05-01 8 views
1

나는 LWUIT 클래스에 List을 가지고 있는데, 목록 자체에 Label이 포함되어 있습니다.Midlet은 추상 클래스가 아니며 abstract 메서드를 재정의하지 않습니다. focusLost (com.sun.lwuit.Component)

레이블에 집중하면 목록에 대한 작업을 수행하기 만하면됩니다.

나는 다음과 같은 오류가 클래스 컴파일 할 때 :

익명 미들 릿 $로 2 개 추상적하지 않고 이 com.sun에 추상적 인 방법의 focusLost (com.sun.lwuit.Component)를 대체하지 않습니다. lwuit.events.FocusListener

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

}); 

답변

3

오류 메시지에있는 코드에 어떤 문제가 있는지의 모든 세부 사항은, 당신은주의 깊게 읽을 필요가있다.

  1. 단어 anonymous,보고 당신에게 뭔가 익명 클래스의 잘못 $Midlet$2 로그인합니다. 당신의 코드에서
    는 오직 하나의 클래스있다 : new com.sun.lwuit.events.FocusListener

  2. does not override abstract method focusLost(com.sun.lwuit.Component)가 익명 클래스는 서명과 방법의 정의를 벗어났습니다 의미

  3. 봐 (서명 메소드 이름과 매개 변수의 유형입니다) 익명의 클래스에서 정의한 메소드에서 더 가깝습니다. 컴파일러가 불평하는 메소드가 있습니까?

  4. 이라는 메서드가 있다고 생각할 수도 있습니다.하지만 (!) 서명은 메서드 이름뿐 아니라 매개 변수 유형 - 및 (!)도 기억해야합니다. 더 가깝게, 매개 변수 유형이 오류 메시지에 필요하다고하지 않는지 알게 될 것입니다.

익명 클래스는 방법 focusLost(com.sun.lwuit.Label)이 있지만 오류 메시지가 다른 서명 (다른 매개 변수 유형)와 방법이 있어야한다 말한다 - focusLost(com.sun.lwuit.Component).

이 컴파일 오류를 수정하려면 new com.sun.lwuit.events.FocusListener 익명 클래스에 focusLost(com.sun.lwuit.Component)이라는 필수 서명이있는 메소드를 추가하십시오.