2013-02-19 2 views
0

액세스 한정자를 더 잘 이해하기 위해 일부 코드를 사용하려고했습니다. Could not find or load main class DemoClass1 모든 클래스가 같은 디렉토리와 같은 패키지에 속하는 : 나는 코드예기치 않은 런타임 오류 : 기본 클래스를로드 할 수 없습니다.

class SomeClass2 { 

    protected static void method4() { } 
    protected static int x=0; 
} 
class SomeClass3 extends SomeClass2{ 

    int c=SomeClass2.x; 
    public void somemethod() //Everything was compiling fine until 
    {      //Until I added this method 
    SomeClass2.method4(); 
    } 
} 
class DemoClass1{ 
     public static void main(String[] parameters) { 
    SomeClass2 sc = new SomeClass2(); 
    SomeClass3 sc1 = new SomeClass3(); 

    sc.method4(); 
    System.out.println(sc1.c); 
sc1.somemethod(); 

    } 
} 

I 오류가 점점 오전의 강행 한 줄을 추가 한 후 모든 훌륭한 실행했다. 환경 변수도 모두 설정됩니다. somemethod()을 추가 할 때까지는 컴파일 및 실행 중이었습니다. 그것은 잘 컴파일하지만 실행되지 않습니다.

+1

어떨까요? 이식? 나는 당신의 코드를 복사하고 잘 실행 된 새로운 클래스를 만들었습니다. 에러 나 아무것도 없습니다. 깨끗한 빌드를해야합니다. –

+0

아니요 저는 메모장을 사용하여 작성하고 cmd (Windows 7)를 사용하여 컴파일했습니다. 환경 변수가 설정됩니다. 비록 내가 다른 파일 이름에 동일한 코드를 넣고 모든 클래스 이름을 변경하고 그것을 컴파일하고 괜찮 았는데 출력을 가지고 : 하지만 내 질문은 왜 이미 작동 코드에서 실행되지 않았다 –

답변

2

내가 제공 한 코드에 분명히 잘못된 것이 보이지 않습니다.

파일의 이름을 변경 했습니까?

JVM은 클래스 내에서 파일 이름과 동일한 이름의 기본 메소드를 찾습니다. 이 경우 파일의 이름은

DemoClass1.java 
+0

아니오 그 하나의 메소드를 이미 작동중인 코드에 추가하는 것 이외의 어떤 변화도하지 않았다. 그 전에 그것은 괜찮 았어 컴파일 –

+0

다른 파일 이름에 동일한 코드를 넣고 모든 클래스 이름을 변경하고 컴파일하고 괜찮 았고 출력 : 0 somemethod 실행 (그냥 SOP 내가 나중에 추가)하지만 내 질문 그것은 이미 작동중인 코드에서 실행되지 않은 이유입니다. –

+0

코드가 올바르게 보이므로 다른 곳에서 문제를 찾을 것입니다. 그것은 개발 환경이나 시스템 변수와 관련하여 여러 가지 이유가있을 수 있습니다. 새 .class 파일을 컴파일하기 전에 이전 .class 파일을 삭제하는지 확인하십시오. Apache Ant, Maven 또는 Gradle과 같은 빌드 도구는이를 대단히 도움이됩니다. 그리고 무엇보다 : 인내! – Liam

0

입니다. 코드에 아무런 문제가 없습니다. 각 파일을 각 파일에 저장했습니다 (DemoClass1.java, SomeClass2.javaSomeClass3.java).

somemethod의 유무에 관계없이 모든 것이 컴파일되어 실행됩니다.

+0

DemoClass1.java SomeClass2.java와 SomeClass3.java가 같은 디렉토리에 있습니다. 그러나이 같은 오류가 발생합니다 –

+0

다른 파일 이름에 동일한 코드를 넣었지만 모든 클래스 이름을 변경하고 컴파일하여 잘 실행되어 출력되었습니다. 0 somemethod가 실행되었습니다 (나중에 SOP를 추가했습니다)하지만 질문은 이미 작동중인 코드에서 실행되지 않은 이유입니다. –

관련 문제