2012-01-02 9 views
43

次のコードは、public void onClick行でこのエラーメッセージを生成します。この行
@Overrideで「スーパークラスメソッドをオーバーライドする必要があります」と表示されるのはなぜですか?

複数のマーカー - タイプ新しいView.OnClickListener(方法のonClick(ビュー)){}スーパークラスのメソッド

をオーバーライドしなければならない - android.view.View.OnClickListener.onClick
を実装

私は理由を理解することはできません。このコードは、私が見た多くの例から抜粋したものです。何が間違っている可能性がありますか?

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-import-a-project-into-eclips –

答えて

108

プロジェクトのプロパティを確認し、そのJavaコンパイラを確認 - >コンパイラ準拠レベル1.6に設定されています。

+10

ありがとう!それはそれを修正した。これは非常に難解です。初心者はこのようなことをどのように知っていると思いますか? –

+0

しかし、強制終了でプログラムがクラッシュするようになりました。 "予期せず停止しました"。うわー、それは役に立ちます。 –

+0

私はsetOnClickListener文をコメントアウトしましたが、findViewById行だけを残しましたが、それでもクラッシュしました! Buttonオブジェクトを取得するだけで、プログラムが予期せず停止することはありますか? –

40

これは、Javaの1.5と1.6の間でソースコードレベルの互換性がない可能性が高いです。 Java 5ので

  • @Override注釈は、方法は、実際にスーパークラスのメソッドをオーバーライドしていることを必要とします。ジャワ6において

  • とメソッドがスーパークラスまたはインタフェースの抽象メソッドを実装している場合、後で、@Override注釈はも満足さう。

だから、あなたが動作することを期待コードでこれを見て最も可能性の高い理由は、あなたは、Java 6(またはそれ以降)は、Java 5コンパイラでコード(またはコンパイラのソース準拠レベルでいくつかの他のコンパイラのコンパイルされています5に設定)。

+7

コンパイラのコンプライアンスレベルが重要である理由を実際に説明してくれてありがとう。 – Dalbergia

3

あなたが1.6にコンパイラを設定しても、このエラーが発生する場合は、あなたの輸入をチェックしてみてください、どのようなEclipseはありませんが、それは常にこの

import android.content.DialogInterface.OnClickListener 

代わりにやろうということですので、 - >

import android.view.View.OnClickListener 
を私の問題を解決し

。 View.onCLickListenerを()置く

0

は私に問題を解決しました。私のJavaコンパイラ - >コンパイラのCOmplianceレベルはすでに1.6に設定されていますが、私は同じ問題を抱えていました。

しかし

rdBtn.setOnClickListener(new View.OnClickListener() { 

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

にコード

rdBtn.setOnClickListener(new OnClickListener() { 

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

を変更するには、私の場合には、問題を解決しました。

2

MAVEN USERS 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がさらにあるため、他の警告

関連する問題