2012-01-02 111 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将额外投入警告在这种情况下,我没有,因为一吨的其他警告

相关问题