Java에서 기본 클래스를 찾거나 로드할 수 없음 오류 수정

Mohammad Irfan 2023년10월12일
  1. Java에서 잘못된 이름을 전달하여 오류를 찾을 수 없음
  2. Java에서 잘못된 패키지 이름으로 인해 오류를 찾을 수 없음
  3. Java의 잘못된 CLASSPATH로 인해 오류를 찾을 수 없음
Java에서 기본 클래스를 찾거나 로드할 수 없음 오류 수정

이 자습서에서는 Java에서 기본 클래스를 찾거나 로드할 수 없음 오류를 소개합니다.

코드를 작성하고 컴파일했다고 가정합니다. 지금까지는 모든 것이 잘 작동하지만 마침내 실행했을 때 오류가 나타났습니다.

could not find or load main class

이 자습서에서는 이 오류가 발생하는 이유와 해결 방법에 대해 설명합니다. 먼저 명령 프롬프트를 사용하여 Java 프로그램을 실행하는 방법을 요약해 보겠습니다.

먼저 아래와 같이 javac 명령을 사용하여 코드를 컴파일합니다.

javac<.java file name>

위의 명령어를 실행하면 .class 확장자를 가진 파일이 현재 폴더에 생성됩니다.

.class 파일은 .java 프로그램과 동일한 클래스를 갖습니다. 그런 다음 다음 명령을 사용하여 .class 파일을 실행하여 Java 코드를 실행합니다.

java<classname>

메인 클래스를 찾거나 로드할 수 없습니다. 오류가 발생할 수 있습니다. 이 오류는 런타임 오류이며 Java 가상 머신이 실행하려는 기본 클래스(기본 메서드가 포함된 클래스)를 찾을 수 없을 때 발생합니다.

이 오류는 명령 프롬프트를 사용하여 Java 프로그램을 실행할 때 가장 일반적으로 발생합니다. 이 오류의 원인을 논의하기 전에 먼저 CLASSPATH에 대해 알아보겠습니다.

Java의 CLASSPATH

이것은 executable.class 및 기타 리소스 파일입니다.

JVM은 이를 사용하여 파일을 찾습니다. 시스템 변수에 CLASSPATH를 명시적으로 설정하지 않는 한 기본 CLASSPATH는 현재 디렉토리입니다.

프로그램을 실행하려면 클래스 이름을 전달해야 합니다. 요점을 설명하기 위해 다음 예를 사용합니다.

public class DelftStack {
  public static void main(String args[]) {
    System.out.println("Hello from DelftStack");
  }
}

먼저 javac 명령을 사용하여 컴파일해 보겠습니다.

C :\Users\User\Documents\DelftStack\java
    > javac DelftStack.java C :\Users\USer\Documents\DelftStack\java
    >

위의 명령을 실행하면 DelftStack.class 파일이 현재 디렉토리에 생성됩니다. java 명령을 사용하여 해당 파일을 실행해 보겠습니다.

C :\Users\User\Documents\DelftStack\java
    > java DelftStack.class Error : Could not find or load main class DelftStack.
class Caused by : java.lang.ClassNotFoundException : DelftStack.class

여기에서 .class 파일을 실행하려고 하기 때문에 오류가 발생합니다. 대신 클래스 이름만 전달하면 됩니다.

아래를 보십시오:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

Java에서 잘못된 이름을 전달하여 오류를 찾을 수 없음

메인 클래스를 찾거나 로드할 수 없습니다는 잘못된 클래스 이름을 전달할 때도 발생할 수 있습니다. 이전 예제를 계속하여 다음과 같이 잘못된 이름으로 프로그램을 실행하려고 하면:

C :\Users\User\Documents\DelftStack\java > java DelftStac Error
    : Could not find or load main class DelftStac Caused by : java.lang.ClassNotFoundException
    : DelftStac

클래스 이름의 철자가 잘못되었기 때문에 위의 오류가 발생합니다. 여기서 JVM은 존재하지 않는 DelftStac이라는 클래스를 실행하려고 합니다.

다음과 같이 클래스 이름을 올바르게 입력하여 이 문제를 해결할 수 있습니다.

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

여기서 우리는 또한 클래스 이름이 대소문자를 구분한다는 점에 주목해야 합니다. Delftstack 클래스를 실행하면 오류가 발생합니다.

아래를 보십시오:

C :\Users\User\Documents\DelftStack\java > java Delftstack Error
    : Could not find or load main class Delftstack Caused by : java.lang.NoClassDefFoundError
    : Delftstack(wrong name
                 : Delftstack)

파일을 성공적으로 실행하려면 올바른 철자와 대소문자를 사용해야 합니다.

Java에서 잘못된 패키지 이름으로 인해 오류를 찾을 수 없음

DelftStack 클래스를 com.DelftStack 패키지로 이동해 보겠습니다. 패키지는 유사한 클래스를 함께 유지하는 데 사용됩니다.

다음 코드를 보십시오.

package com.DelftStack;

public class DelftStack {
  public static void main(String args[]) {
    System.out.println("Hello from DelftStack");
  }
}

Java로 패키지를 컴파일하려면 다음 명령을 사용합니다.

javac - d.<.java file name>

-d 플래그 스위치는 생성된 클래스 파일을 보관할 위치를 지정하는 데 사용됩니다. . 현재 디렉토리를 의미합니다.

위의 코드를 다음과 같이 컴파일합니다.

C :\Users\User\Documents\DelftStack\java > javac - d.DelftStack.java

위의 명령을 실행하면 현재 디렉터리에 다음 폴더 구조가 생성됩니다.

com\DelftStack\DelftStack.class

보시다시피 클래스 파일은 현재 디렉토리에서 두 개의 폴더 깊이에 있습니다. 따라서 이전의 경우와 같이 클래스 파일을 실행하려고 하면 오류가 발생합니다.

C :\Users\User\Documents\DelftStack\java > java DelftStack Error
    : Could not find or load main class DelftStack Caused by : java.lang.ClassNotFoundException
    : DelftStack

이 오류의 원인은 현재 폴더에 DelftStack 클래스가 없기 때문입니다. 패키지에 있는 클래스를 실행하려면 정규화된 이름(이 경우 com.DelftStack.DelftStack)을 전달해야 합니다.

C :\Users\User\Documents\DelftStack\java > java com.DelftStack.DelftStack Hello from DelftStack

이것은 Java가 com\DelftStack 폴더 내에서 클래스를 찾도록 지시합니다.

Java의 잘못된 CLASSPATH로 인해 오류를 찾을 수 없음

CLASSPATH는 .class 파일이 있는 위치를 JVM에 알려줍니다.

현재 다른 폴더에 있고 클래스 파일이 다른 폴더에 있는 Java 프로그램을 실행하려고 한다고 가정합니다. 이 경우 -classpath 옵션을 사용하여 클래스 파일의 위치를 ​​전달할 수 있습니다.

예를 들어:

java - classpath XYZ / ABC < class name
>

위의 명령은 Java가 ZYX/ABC 폴더에서 .class 파일을 찾도록 지시합니다.

이전의 경우 패키지를 만들었습니다.

com/DelftStack 폴더 내에서 파일을 실행하려고 한다고 가정합니다. 다음 명령을 사용하여 그렇게 할 수 있습니다.

> java - classpath../../ com.DelftStack.DelftStack Hello from DelftStack

../는 상위 디렉토리를 의미합니다. 따라서 ../../는 두 개의 디렉토리 수준을 조회하는 것을 의미합니다.

다른 예를 들어 우리가 데스크탑(폴더) 위치에 있고 컴퓨터의 다른 위치에서 클래스 파일을 실행하려고 한다고 가정해 보겠습니다. 우리는 아래에 의해 그렇게 할 수 있습니다.

> java - cp C :\Users\User\Documents\DelftStack\java com.DelftStack.DelftStack Hello from DelftStack

-cp 플래그는 -classpath의 약어입니다. 여기에서 .class 파일이 있는 폴더의 전체 위치를 전달했습니다.

관련 문장 - Java Error