2012-01-02 43 views
43

Đoạn mã sau tạo thông báo lỗi này tại dòng public void onClick.Tại sao tôi nhận được "phải ghi đè lên một phương thức siêu lớp" với @Override?

Nhiều dấu tại dòng này
- thực hiện android.view.View.OnClickListener.onClick
- Phương pháp onClick (View) của kiểu mới View.OnClickListener() {} phải ghi đè lên một phương pháp lớp cha

Tôi không thể hiểu tại sao. Mã này được lấy từ nhiều ví dụ tôi đã thấy. Điều gì có thể sai?

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 –

Trả lời

108

Kiểm tra tính chất của dự án và xác minh rằng Java Compiler -> mức độ biên dịch tuân thủ được thiết lập để 1,6.

+10

Cảm ơn! Điều đó đã sửa nó. Điều này thật phức tạp. Làm thế nào là một newbie nghĩa vụ phải biết loại điều? –

+0

Tuy nhiên, bây giờ chương trình bị treo với một đóng buộc - "đã dừng đột ngột". Wow, đó là hữu ích. –

+0

Tôi đã nhận xét câu lệnh setOnClickListener, nhưng chỉ để lại dòng findViewById và nó vẫn bị treo! Làm thế nào có thể hành động đơn thuần của việc lấy đối tượng Button khiến chương trình dừng đột ngột? –

40

Điều này rất có thể là do sự không tương thích cấp mã nguồn giữa Java 1.5 và 1.6.

  • Chú thích Java yêu cầu phương pháp này thực sự ghi đè phương thức trong siêu lớp.

  • Trong Java 6 trở lên, chú thích @Override sẽ cũng được đáp ứng nếu phương pháp đang triển khai phương pháp trừu tượng trong siêu lớp hoặc giao diện.

Vì vậy, nhiều khả năng bạn thấy mã này mà bạn mong muốn làm việc là biên dịch mã Java 6 (hoặc mới hơn) bằng trình biên dịch Java 5 (hoặc một số trình biên dịch khác với mức tuân thủ nguồn của trình biên dịch) đặt thành 5).

+7

Cảm ơn bạn đã thực sự giải thích * tại sao * mức tuân thủ trình biên dịch là quan trọng. – Dalbergia

3

Nếu bạn đặt trình biên dịch để 1.6 và vẫn nhận được lỗi này, hãy thử để kiểm tra hàng nhập khẩu của bạn, bởi vì những gì Eclipse không là nó luôn luôn cố gắng để làm điều này

import android.content.DialogInterface.OnClickListener 

thay vì ->

import android.view.View.OnClickListener 

Điều đó giải quyết được vấn đề của tôi.

0

Đặt View.onCLickListener() đã giải quyết được sự cố cho tôi. Trình biên dịch Java của tôi -> Mức độ biên dịch của trình biên dịch đã được đặt thành 1.6 nhưng tôi vẫn gặp vấn đề tương tự.

Nhưng thay đổi mã

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

giải quyết các vấn đề trong trường hợp của tôi.

2

MAVEN USERS Nếu bạn đang sử dụng Maven để xây dựng, nó có thể ghi đè cài đặt nhật thực trong khi xây dựng. Vì vậy, nếu bạn đặt Eclipse là 1.7 nhưng không cụ thể thiết lập phiên bản xây dựng Maven JDK (mà tại thời điểm viết bài này mặc định là 1.5), thì nó sẽ thiết lập lại trình biên dịch mục tiêu eclipse về 1.5. Đặt trình biên dịch Maven như sau.

<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

Đối với tôi điều này xảy ra bởi vì các phương pháp tôi muốn ghi đè lên là gói tin và tôi đã cố gắng để ghi đè lên nó từ một gói khác nhau.

Eclipse sẽ bổ sung đưa ra cảnh báo trong trường hợp đó mà tôi không để ý vì một tấn các cảnh báo khác

Các vấn đề liên quan