수정 : 메인 클래스를 찾거나로드 할 수 없음

터미널에서 클래스 이름을 지정하여 Java 프로그램을 시작하기 위해 명령 프롬프트에서 java 명령을 사용할 때 ' 주 클래스를 찾거나로드 할 수 없습니다. '오류 가 발생합니다. 이런 일이 발생하는 이유는 주로 클래스를 선언하는 동안 사용자의 프로그래밍 실수 때문입니다.

Java 명령 줄에서 기본 클래스를 찾거나로드 할 수 없습니다.

앞서 언급했듯이이 오류는 대부분 시스템과 관련이 없으며 사용자는 아래와 같이 여러 시나리오에서 실수를합니다. 계속 진행하기 전에 Java 프로그래밍 언어 및 작동 방식에 대한 기본 지식이 있다고 가정합니다.

Java에서 '주 클래스를 찾거나로드 할 수 없습니다'라는 오류의 원인은 무엇입니까?

'기본 클래스를 찾거나로드 할 수 없습니다'메시지는 실행을 위해 클래스를 가져 오는 Java 엔진의 첫 번째 단계가 실패했음을 의미합니다. 자바 명령을 할 수 없습니다 찾을 올바른 디렉토리에서 클래스를.

경우에 따라 올바른 파일 경로 를 추가 하고 Java 터미널이 올바른 위치를 가리 키도록해야합니다. 명령 줄 터미널에서 명령을 실행하기 때문에 컴퓨터는 클래스가 어디에 있는지 또는 어디에 있는지 알지 못합니다. 대상 IDE에서는 IDE가 현재 작업 디렉터리를 가리키는 포인터를 유지하므로 문제가되지 않습니다.

'자바'구문이란 무엇입니까?

실행을 시도 할 때 터미널이 오류를 반환하는 이유에 대한 문제 해결을 시작하기 전에 먼저 명령 구문을 살펴 봐야합니다. 올바른 구문을 사용하지 않으면 필연적으로이 오류가 발생합니다.

명령의 일반적인 구문은 다음과 같습니다.

 자바 [...] [...]

다음은 완전한 Java 클래스 이름 인 명령 행 옵션이며 전체 패키지가 컴파일 될 때 애플리케이션에 전달되는 명령 행 인수입니다.

유효한 명령의 예는 다음과 같습니다.

java -Xmx100m com.acme.example.ListAppuals 케빈 애로우 바트

위의 명령은 java 명령이 다음 작업을 실행하도록합니다.

  • ' com.acme.example.ListAppuals ' 클래스의 컴파일 된 버전을 검색합니다 .
  • 검색 후 클래스를로드합니다.
  • 다음으로 클래스가로드되면 유효한 서명, 수정 자 및 반환 유형이있는 'main'메서드를 클래스에서 검색합니다. 샘플 메인 클래스는 다음과 같습니다.
public static void main (String [])
  • 이 메서드는 'kevin', 'arrows'및 'bart'인수를 string []으로 사용하여 호출됩니다.

'메인 클래스를 찾거나로드 할 수 없음'을 수정하는 방법

해결 방법 1 : 클래스 이름 인수 확인

사용자가 저지르는 가장 일반적인 실수는 잘못된 클래스 이름을 인수로 제공하는 것입니다 (또는 올바른 클래스 이름이 잘못된 형식입니다). 명령 줄에서 매개 변수를 선언하고 있으므로 잘못된 형식으로 클래스 이름 인수를 전달할 가능성이 높습니다. 여기에서는 실수 할 수있는 가능한 모든 시나리오를 나열합니다.

  • 간단한 클래스 이름 작성 . 'com.acme.example'과 같은 패키지에서 클래스를 선언하는 경우 Java 명령에서 패키지를 포함한 전체 클래스 이름 을 사용해야합니다 .
java com.acme.example.ListAppuals

대신에

자바 ListAppuals
  • 파일 이름이나 경로 이름을 선언하는 대신 클래스 이름을 선언 해야합니다 . Java는 경로 이름 / 파일 이름을 선언하면 클래스를 가져 오지 않습니다. 잘못된 항목은 다음과 같습니다.
java ListAppuals.class java com / acme / example / ListAppuals.class
  • 케이싱 을 고려해야합니다. Java 명령은 대소 문자를 구분하며 한 글자라도 실수하면 메인 클래스를로드 할 수 없습니다. 잘못된 실수 의 예 는 다음과 같습니다.
java com.acme.example.listappuals
  • 당신은 선언 소스 파일 이름을 . 앞에서 언급했듯이 올바른 전체 클래스 이름 형식으로 만 클래스를 선언하면됩니다. 실수의 예는 다음과 같습니다.
자바 ListAppuals.java
  • 이 오류는 입력 실수를 하거나 클래스 이름을 완전히 쓰는 것을 잊은 경우에도 발생합니다 .

클래스 이름을 잘못 선언 한 경우이를 수정 한 다음 프로그램을 실행 해보십시오.

해결 방법 2 : 클래스 경로 확인

클래스 이름을 올바르게 선언했지만 여전히 오류가 표시되는 경우 java 명령이 경로에서 지정된 클래스 이름을 찾을 수 없을 가능성이 있습니다. 클래스 경로는 Java 런타임이 리소스 및 클래스 파일을 검색하는 경로입니다. 아래와 같이 두 가지 다른 명령을 사용하여 클래스 경로를 쉽게 설정할 수 있습니다.

C :> sdkTool -classpath classpath1; classpath2 ... C :> set CLASSPATH = classpath1; classpath2 ...

클래스 경로에 대한 더 많은 정보를 얻으려면 다음 문서를 확인해야합니다.

Java 명령 문서

클래스 경로 설정

해결 방법 3 : 디렉터리 확인

디렉토리를 클래스 경로로 선언하면 항상 네임 스페이스의 루트에 해당합니다. 예를 들어 "/ usr / local / acme / classes"가 클래스 경로에 있으면 Java는 "com.acme.example.Appuals"클래스를 검색합니다. 다음 경로 이름을 가진 클래스를 찾습니다.

/usr/local/acme/classes/com/acme/example/Appuals.class

따라서 본질적으로 클래스 경로에 다음 주소를 입력하면 Java가 클래스를 찾을 수 없습니다.

/ usr / local / acme / classes / com / acme / example

또한 하위 디렉터리 를 확인하고 FQN과 일치하는지 확인해야합니다 . 클래스 FQN이 "com.acme.example.Appuals"이면 Java는 "com / acme / example"디렉토리에서 "Appuals.class"를 검색합니다.

예를 들어 다음 시나리오를 가정 해 보겠습니다.

  • 실행할 클래스는 com.acme.example.Appuals입니다.
  • 전체 파일 경로는 다음과 같습니다 /usr/local/acme/classes/com/acme/example/Appuals.class
  • 현재 작업 디렉토리 입니다 : / usr / 지방 / ACME / 클래스 / COM / ACME / 예 /

그러면 다음 시나리오가 유지됩니다.

# wrong, FQN is needed java Appuals # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Appuals # wrong, similar to above scenario java -classpath . com.acme.example.Appuals # OK ; a relative classpath is set java -classpath ../../.. com.acme.example.Appuals # OK; an absolute classpath is set java -classpath /usr/local/acme/classes com.acme.example.Appuals

Note: The classpath needs to also include all the other classes (non-system) which your applications needs.

Solution 4: Checking class package

위의 모든 솔루션이 귀하의 경우에 해당하는 경우 소스 코드가 올바른 폴더에 있는지 확인해야합니다. 또한 패키지를 올바르게 선언했습니다 . IDE에서 코드를 실행하면 문제에 대해 알려줄 것입니다. 그러나 우리의 경우 명령 프롬프트에서 실행하기 때문에 실수가 눈에 띄지 않게되고 토론 중에 클래스 오류가 발생합니다.