2012-02-08 4 views
0

얻기 나는 Namable이상한 java.lang.NoSuchMethodError 오류

라는 인터페이스가
public interface Namable { public String getName(); public void setName(String name); }; 

몇 가지 클래스는이를 구현됩니다.

를 걸 때 같은 코드 :

Namable foo = new X(); foo.getName();

(X 인 구현 클래스)

내가 오류 얻을 :

java.lang.NoSuchMethodError: Namable.getName()Ljava/lang/String;

이것은 매우 이상한입니다 저와 저는 왜 이것이 일어나고 있는지, 어떤 생각을하고 있는지 궁금합니다.

에 Compilable 예 :

Namable 클래스 :

public interface Namable 
    { 
    public String getName(); 
    } 

확장 클래스 X :

public class X extends java.util.ArrayList implements Namable 
{ 
    private String name; 
    public X() 
    { 
    this.name = "bar"; 
    } 
    public String getName() 
    { 
    return name; 
    } 
} 

테스트 클래스 :

public class Test 
{ 
    public static void main() 
    { 
    Namable foo = new X(); 
    foo.getName(); 
    } 
} 

이를 실행 한 후, 나는 같은 얻을 오류. 나는 당신이 호출 할 필요가 BlueJ의

+0

'foo = X()'에'new'가 누락 되었습니까? 아니면 정적 팩토리 메소드로'X'입니까? 프록시 클래스로 이국적인 것을하고 있습니까? DI 프레임 워크 나 프록시 클래스를 사용하는 테스트 스터 빙 프레임 워크와 같은 이국적인 프레임 워크를 사용하고 있습니까? –

+1

이 문제에 대해 더 많은 코드 (및 올바른 코드)를 제공해주십시오. 나는 당신이 문제를 정확하게 설명하기에는 너무 짧다고 생각합니다. –

+0

자, 코드에 "새로운"것이 있고 X는 단지 클래스입니다 (X 또한 ArrayList를 확장하는 일이 있습니다,이 부분이 될 수 있습니까?). 나는 멋진 것을하지 않고있다. 사실, 나는 문맥을 벗어난 문제를 상기와 같이 그리고 여전히 같은 오류를주는 것으로서 디버깅하려고했다. – Alan

답변

3

난 당신이 여기에 준 클래스와 예제를 실행 한 그것은 기대 작품으로 나는 BlueJ가 클래스를 실행하는 특별한 메커니즘을 사용함을 기억한다.)

클래스 패스에 다른 클래스 Nameable이 있습니까? 패키지 가져 오기를 확인하고 정의한 인터페이스인지 확인하십시오. 오류는 코드가 아닌 사용자 환경에서 발생합니다.

+0

이것은 트릭을 수행하는 것처럼 보였습니다. 코드는 그 코드와 아무 관련이 없습니다. 감사! – Alan

2

을 사용하고

foo.getName() 

하지

X.getName() 

존재하지 않는 클래스 (정적) 메소드를 호출하려고합니다.

그리고 Namable foo = new X();해야 - 당신의 예제 코드는 심지어 같이 컴파일되지해야합니다.

당신은 SSCCE를 제공 할 수 있습니까?

다음 수정 사항 및 SSCCE :이 업데이트되었습니다. BlueJ는 이미 Namable을 정의 했습니까? 아니면 대신 가져올 수있는 다른 패키지에 Namable이 있습니까? 위의 예에서 Namable을 Namable2로 이름을 바꾸면 어떻게됩니까?

+0

오, 이런 ... 미안 해요 오타되었습니다 인스턴스 이름으로 메서드를 호출 오전 – Alan

0

DNA에 의해 언급 한 바와 같이 귀하의 게시물이 더 나은 SSCCE와 것

내 생각 엔 아마도 당신은 주요 기능에 "static"키워드를 놓친 수있는 일 것이다

public static void main(String args[]) 

하지

public void main(String args[]) 

클래스 경로 문제 일 수도 있습니다 ... 또는 파일 이름과 클래스가 일치하지 않습니다. 또는 다른 것.난 당신의 코드를 실행하면

+0

문제는 클래스 패스 또는 이름 불일치 문제입니다. 문제를 해결하려면 어떻게해야합니까? 이 같은 일이 발생하지 않았습니다. – Alan

0

표시된 오류가

Error: Main method not found in class Test, please define the main method as: public static void main(String[] args)

내가 당신의 주어진 코드로

java.lang.NoSuchMethodError: Namable.getName()Ljava/lang/String;

을 받고 있지 않다

public static void main(String[] args) 

main 방법을 변경

입니다 .

public static void main(String[] args) 

그러나 당신은 BlueJ를 사용하는 것처럼이 (문제가되지 않을 수 있습니다 : 주요 방법으로 변경되면

+0

BlueJ에 문제가 있다고 생각하기 시작했습니다. 코드 스 니펫을 테스트하는 완전히 새로운 프로젝트를 만들었으며 동일한 오류가 발생했습니다. – Alan

관련 문제