2012-01-02 100 views
43

以下代碼在public void onClick行處生成此錯誤消息。在這條線
爲什麼我用@Override獲得「必須重寫超類方法」?

多個標記 - 實現android.view.View.OnClickListener.onClick
- 型的方法的onClick(查看)新View.OnClickListener(){}必須重寫一個超類方法

我不明白爲什麼。這段代碼來自我見過的很多例子。什麼可能是錯的?

private Button audioButton; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    audioButton = (Button) findViewById(R.id.imageButton1); 
    audioButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View button) { 
      if (button.isSelected()) { 
       button.setSelected(false); 
      } 
      else { 
       button.setSelected(true); 
      } 
     } 
    }); 
} 
+0

http://stackoverflow.com/questions/1678122/must-override-a-superclass-method的通知-errors-after-imports-a-project-into-eclips – 2012-01-02 05:14:41

回答

108

檢查項目的屬性,並驗證Java編譯器 - >編譯器合規水平設置爲1.6

+10

謝謝!這解決了它。這太神祕了。新手應該如何知道這種事情? – 2012-01-02 14:14:39

+0

但是,現在程序崩潰時被迫關閉 - 「意外停止」。哇,這很有幫助。 – 2012-01-02 14:26:56

+0

我註釋掉了setOnClickListener語句,但是單獨留下了findViewById行,它仍然崩潰!如何獲得Button對象的行爲導致程序意外停止? – 2012-01-02 14:30:36

40

這很可能是由於Java 1.5和1.6之間的源代碼級別不兼容。

  • 在Java 5中,註釋@Override要求,該方法實際上是覆蓋在一個超類的方法。

  • 在Java 6和後,@Override註釋將如果該方法實現在一個超類或接口的抽象方法被滿足。

因此,對於您所期望的工作代碼看到這最可能的原因是,你編譯Java 6(或更新版本)和Java 5編譯器代碼(或一些其他的編譯器編譯器的源代碼兼容級別設置爲5)。

+7

感謝您真正解釋*爲什麼*編譯器合規性級別非常重要。 – Dalbergia 2012-01-23 15:41:26

3

如果設置了編譯器1.6,仍然可以得到此錯誤,請檢查您的進口,因爲什麼Eclipse一樣的是,它總是試圖做的,而不是這個

import android.content.DialogInterface.OnClickListener 

- >

import android.view.View.OnClickListener 

解決了我的問題。

0

把一個View.onCLickListener()解決了我的問題。我的Java編譯器 - >編譯器COmpliance級別已經設置爲1.6,但仍然遇到同樣的問題。

但改變代碼

rdBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       onRadioButtonClicked(v); 
      } 
     }); 

rdBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       onRadioButtonClicked(v); 
      } 
     }); 

在我的情況下解決了這個問題。

2

MAVEN用戶 如果您使用Maven構建,它可以在構建期間覆蓋eclipse設置。因此,如果您將Eclipse設置爲1.7,但沒有專門設置Maven JDK構建版本(在編寫本文時默認爲1.5),那麼它會將eclipse目標編譯器重置爲1.5。如下設置Maven編譯器。

<build> 
     ... 
     <plugins> 
      .... 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.5.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins>    
    </build> 
0

對我來說這事,因爲我想覆蓋的方法是包私人,我試圖從不同的包覆蓋它。

Eclipse將額外投入警告在這種情況下,我沒有,因爲一噸的其他警告

相關問題