"메인 클래스를 찾을 수 없거나 로드할 수 없습니다"는 무슨 의미입니까?
Java 는 "Java"라는 오류와 함께 되지 않고 "Java"라는 가 발생한다는 입니다.Could not find or load main class ...
이것은 무엇을 의미하며, 원인은 무엇이며, 어떻게 수정해야 합니까?
java <class-name>
구문
이 을 시작할 때 하는지 합니다.java
(오류)javaw
령어입입니니다
통상의1 구문은 다음과 같습니다.
java [ <options> ] <class-name> [<arg> ...]
서 ''는<option>
로 시작하는 문자입니다.<class-name>
이름입니다.자바 클래스명은 "Java" 입니다.<arg>
는 어플리케이션에 전달되는 임의의 명령줄 인수입니다.
1 - 이 답변의 끝에 설명되어 있는 다른 구문이 몇 가지 있습니다.
클래스의 Fully Qualified Name(FQN; 완전 수식 이름)은 일반적으로 Java 소스 코드(예:
packagename.packagename2.packagename3.ClassName
, 「」의 은, 「」입니다.java
명령어를 사용하면 마침표 대신 슬래시를 사용할 수 있습니다.
packagename/packagename2/packagename3/ClassName
파일 경로 이름처럼 보이지만 파일 경로 이름이 아닙니다.완전 수식명이라는 용어는 표준 Java 용어입니다.당신을 혼란스럽게 하기 위해 지어낸 것이 아닙니다:-)
, 이런 것이 .java
츠키다
java -Xmx100m com.acme.example.ListUsers fred joe bert
, 상기의 원인이 .java
명령어를 사용하여 다음 작업을 수행합니다.
- .
com.acme.example.ListUsers
를 누릅니다 - 클래스를 로드합니다.
- 클래스에 다음 항목이 있는지 확인합니다.
main
시그니처, 리턴 타입 및 수식자가 지정된 메서드public static void main(String[])
(method 인수 이름은 시그니처의 일부가 아닙니다). - 을 명령줄 " ".
String[]
.
Java가 클래스를 찾을 수 없는 이유
"메인 클래스를 찾거나 로드할 수 없습니다..."라는 메시지가 표시되면 첫 번째 단계가 실패했음을 의미합니다.java
명령을 사용하여 클래스를 찾을 수 없습니다.그리고 실제로, 메시지의 "..."는 다음과 같은 완전 수식 클래스 이름이 될 것입니다.java
고고있있있있다다
그럼 왜 수업을 못 찾을까요?
이유 1 - classname 인수를 잘못 입력했습니다.
첫 번째 원인으로는 클래스 이름을 잘못 입력했을 가능성이 있습니다.(또는... 올바른 클래스 이름이지만 형식이 올바르지 않습니다.)위의 예를 참고하여 클래스 이름을 지정하는 다양한 잘못된 방법을 다음에 제시하겠습니다.
예 1 - 간단한 클래스 이름:
java ListUser
가 "Drughta" 된
com.acme.example
패키지명을 포함한 완전한 클래스명을 사용해야 합니다.java
★★★★★★★★★★★★★★★★★★.java com.acme.example.ListUser
예 2 - 클래스 이름이 아닌 파일 이름 또는 경로 이름:
java ListUser.class java com/acme/example/ListUser.class
예 3 - 케이스가 잘못된 클래스 이름:
java com.acme.example.listuser
예 4 - 오타
java com.acme.example.mistuser
예 5 - 소스 파일 이름(Java 11 이후 제외.아래 참조)
java ListUser.java
예 6 - 클래스 이름을 완전히 잊어버렸습니다.
java lots of arguments
이유 2 - 응용 프로그램의 클래스 경로가 잘못 지정되었습니다.
" " "가 올바른 입니다.java
명령을 사용하여 클래스를 찾을 수 없습니다.이를 이해하려면 "classpath"의 개념을 이해해야 합니다.이는 Oracle 문서에서 잘 설명되어 있습니다.
java
매뉴얼- Classpath 설정.
- Java 튜토리얼 - PATH 및 CLASSPATH
따라서... 클래스 이름을 올바르게 지정한 경우 다음으로 클래스 경로를 올바르게 지정했는지 확인해야 합니다.
- 위에 링크된 3개의 문서를 읽어보십시오.(네...읽어주세요!Java 프로그래머가 Java 클래스 경로 메커니즘의 기본을 이해하는 것이 중요합니다.)
- 실행 시및 합니다.
java
명령어를 입력합니다.디렉토리명과 JAR 파일명이 올바른지 확인합니다. - 클래스 패스에 상대적인 패스명이 있는 경우는, 그 패스명이 올바르게 해결되고 있는 것을 확인합니다.
java
명령어를 입력합니다. - (오류 메시지에 기재되어 있는) 클래스를 유효한 클래스 패스에 배치할 수 있는지 확인합니다.
- classpath 구문은 Windows와 Linux 및 Mac OS에 따라 다릅니다(classpath 구분자는
;
및 Windows »:
플랫폼에 구분 인 오류 메시지가 되지 않습니다플랫폼에 잘못된 구분 기호를 사용하면 명시적 오류 메시지가 표시되지 않습니다.대신,.=조용히 무시될 경로에 존재하지 않는 파일 또는 디렉터리를 받을 것이다.
이성#2a- 잘못된 디렉터리에 classpath.
언제 classpath에 디렉터리를 올려 놓으면, 순이론적으로 정규화된 이름 공간의 뿌리에 해당합니다.클래스가 뿌리 밑에 있는 디렉터리 구조에, 경로 이름으로 정규화된 이름 지도가 가능 위치해 있다.만약"/usr/local/acme/classes"클래스 경로에 서 있다는 예를 들어, 그 때는 JVM이라고 불리는 수업을 찾는다.com.acme.example.Foon
.class로 하다
/usr/local/acme/classes/com/acme/example/Foon.class
클래스 패스에 "/usr/local/acme/classes/com/acme/example"을 입력하면 JVM은 클래스를 찾을 수 없습니다.
이유 #2b - 하위 디렉터리 경로가 FQN과 일치하지 않습니다.
이 "FQN"인 com.acme.example.Foon
JVM "com/acme/example" "Foon.class" 입니다.
디렉토리 구조가 위의 패턴에 따라 패키지 이름과 일치하지 않으면 JVM은 클래스를 찾을 수 없습니다.
클래스 이름을 이동하여 이름을 바꾸려고 하면 그것도 실패하지만 예외 스택 트레이스는 다릅니다.다음과 같은 말을 할 수 있습니다.
Caused by: java.lang.NoClassDefFoundError: <path> (wrong name: <name>)
클래스 파일의 FQN이 클래스 로더가 기대하는 것과 일치하지 않기 때문입니다.
구체적인 예를 들면 다음과 같다.
-
com.acme.example.Foon
sclass, - 는 「」입니다.
/usr/local/acme/classes/com/acme/example/Foon.class
, - 는 " " " 입니다.
/usr/local/acme/classes/com/acme/example/
,
그 후, 다음과 같이 합니다.
# wrong, FQN is needed
java Foon
# wrong, there is no `com/acme/example` folder in the current working directory
java com.acme.example.Foon
# wrong, similar to above
java -classpath . com.acme.example.Foon
# fine; relative classpath set
java -classpath ../../.. com.acme.example.Foon
# fine; absolute classpath set
java -classpath /usr/local/acme/classes com.acme.example.Foon
주의:
-classpath
사용할 수 .-cp
를 참조해 주세요.되어 있는 을 확인해 .java
,javac
기타 등등.- 클래스 경로의 절대 경로 이름과 상대 경로 이름 중 하나를 선택할 때는 신중하게 고려하십시오.현재 디렉토리가 변경될 경우 상대 경로 이름이 "끊길" 수 있습니다.
이유 #2c - 클래스 경로에 종속성이 없습니다.
클래스 경로에는 응용 프로그램이 의존하는 다른 모든 (시스템이 아닌) 클래스가 포함되어야 합니다(시스템 클래스는 자동으로 배치되므로 이 문제에 대해 걱정할 필요가 거의 없습니다).메인 클래스를 올바르게 로드하려면 JVM이 다음을 검색해야 합니다.
- 수업 자체입니다.
- 슈퍼 클래스 계층의 모든 클래스 및 인터페이스(예: Java 클래스가 클래스 경로에 있지만 부팅이 실패하고 오류: 메인 클래스를 찾을 수 없습니다 또는 로드할 수 없습니다)
- 변수 또는 변수 선언 또는 메서드콜 또는 필드 액세스 식에 의해 참조되는 모든 클래스 및 인터페이스.
(주의: JLS 및 JVM 사양에서는 JVM이 클래스를 "느긋하게" 로드할 수 있는 범위가 있으며 이는 클래스 로더 예외가 발생할 때 영향을 미칠 수 있습니다.)
이유 3 - 클래스가 잘못된 패키지로 선언되었습니다.
트리의 코드 파일이 될 수 .package
,。 에서 이 .이것을 IDE 로 실행하면, IDE 의 컴파일러에 의해서 즉시 통지됩니다.가 실행됩니다.javac
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Java 하지 않고 ".class" 할 수.
아직도 문제를 찾을 수 없습니까?
확인해야 할 것이 많고, 놓치기 쉽다. 여러분도 같이 .-Xdiag
옵 java
뒤에 첫 로서)java
클래스 로딩에 관한 다양한 정보를 출력하여 실제 문제가 무엇인지 알 수 있습니다.
또, ASC 이외의 카피와 페이스트에 의해서 발생할 가능성이 있는 문제에 대해서도 생각해 주세요.웹 사이트, 문서 등의 II 문자그리고 두 글자나 기호가 같아 보이지만 그렇지 않은 "호모그램"을 생각해 보세요.
무효 가 있는 이 할 수 .META-INF/*.SF
. ZIP .jar에서 할 수 META-INF
가 것이 때까지MANIFEST.MF
그러나 이는 일반적으로 권장되지 않습니다. (부정한 서명은 누군가가 서명된 원래 JAR 파일에 말웨어를 주입한 결과일 수 있습니다.무효 시그니처를 소거하면, 맬웨어에 의해서 애플리케이션이 감염됩니다.유효한 서명이 있는 JAR 파일을 입수하거나 원래의 소스 코드에서 재구축하는 것이 좋습니다.
구문 이 할 수 .MANIFEST.MF
파일(https://stackoverflow.com/a/67145190/139985) 참조).
의 대체 java
대체 은 세 가 있습니다.java command
.
"executable" JAR 파일을 시작할 때 사용되는 구문은 다음과 같습니다.
java [ <options> ] -jar <jar-file-name> [<arg> ...]
예.
java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred
「」)입니다.
com.acme.example.ListUser
클래스 패스는 JAR 파일의 매니페스트로 지정됩니다.모듈(Java 9 이후)에서 애플리케이션을 기동하는 구문은 다음과 같습니다.
java [ <options> ] --module <module>[/<mainclass>] [<arg> ...]
은, 됩니다.
<module>
자체 인 그 itself itself 、 。<mainclass>
.이후로는 11 을 할 수 있습니다.
java
명령어를 사용하여 다음 구문을 사용하여 단일 소스 코드 파일을 컴파일 및 실행합니다.java [ <options> ] <sourcefile> [<arg> ...]
서 ''는
<sourcefile>
.certificate하다
것에 대하여는, 「 」의 .java
명령어를 사용합니다.
IDE
일반적인 Java IDE는 IDE JVM 자체 또는 하위 JVM에서 Java 애플리케이션을 실행할 수 있습니다.IDE는 독자적인 메커니즘을 사용하여 런타임클래스 패스를 구축하고 메인클래스를 식별하여 이 특별한 예외로부터 해방됩니다.java
커맨드 라인
다만, IDE 의 배후에 작업을 실시하면, 이 예외가 발생할 가능성이 있습니다.예를 들어 이전에 Eclipse에서 Java 앱용 응용 프로그램 런처를 설정한 후 Eclipse에 알리지 않고 파일 시스템의 다른 위치로 "메인" 클래스가 포함된 JAR 파일을 이동하면 Eclipse는 자신도 모르게 잘못된 클래스 경로로 JVM을 시작합니다.
즉, IDE에서 이 문제가 발생할 경우 오래된 IDE 상태, 프로젝트 참조가 깨지거나 런처 구성이 깨지는 등의 문제가 없는지 확인합니다.
IDE가 단순히 혼동될 수도 있습니다.IDE는 많은 상호작용하는 부분으로 구성된 매우 복잡한 소프트웨어입니다.이러한 부품의 대부분은 IDE 전체의 응답성을 높이기 위해 다양한 캐싱 전략을 채택하고 있습니다.이러한 문제가 발생할 수 있으며 애플리케이션 실행 시 문제가 발생할 수 있습니다.이 문제가 발생할 가능성이 있다고 생각되면 IDE 재시작, 프로젝트 재구축 등 다른 작업을 시도해 볼 필요가 있습니다.
기타 레퍼런스
는 "HelloWorld.java"가 .HelloWorld.class
.
다음의 방법으로 호출하면, 에러가 발생합니다.
java HelloWorld.class
대신 다음을 사용합니다.
java HelloWorld
클래스가 패키지로 되어 있는 경우는, 다음의 조작을 실시할 필요가 있습니다.cd
프로젝트의 루트 디렉토리로 이동하여 클래스의 완전 수식 이름(packageName)을 사용하여 실행합니다.MainClassName)를 선택합니다.
예제:
제 수업은 여기 있습니다.
D:\project\com\cse\
주 수업의 전체 이름은 다음과 같습니다.
com.cse.Main
저는cd
이치노
D:\project
'다 하다'를 해 주세요.java
★★★★★★★★★★★★★★★★★★:
java com.cse.Main
이 답변은 자바 프로그래머 초보자들을 흔한 실수로 인한 좌절감에서 구해주는 것입니다.Java classpath에 대한 자세한 내용은 승인된 답변을 읽어보시기 바랍니다.
키워드 'package' 포함
소스 코드에 키워드가 있는 경우(메인 클래스는 패키지에 정의되어 있습니다), 클래스의 풀네임을 사용하여 계층 디렉토리상에서 실행할 필요가 있습니다( ).packageName.MainClassName
를 참조해 주세요.
소스 코드 파일(Main.java)이 있다고 가정합니다.
package com.test;
public class Main {
public static void main(String[] args) {
System.out.println("salam 2nya\n");
}
}
하려면 , 「 하다」를 합니다.Main.Class
다음 디렉토리와 같은 패키지에 있습니다.
C:\Users\workspace\testapp\com\test\Main.자바
그런 다음 터미널의 현재 디렉터리를 프로젝트의 루트 디렉터리로 변경합니다.
cd C:\Users\workspace\testapp
마지막으로 코드를 실행합니다.
java com.test.Main
키워드 'package' 없음
소스코드명에 패키지가 없는 경우는, 잘못된 커맨드를 사용하고 있을 가능성이 있습니다.이 Java 파일 이름이라고 합니다.Main.java
[ ] :
javac Main.java
는 """입니다.Main.class
다음의 방법으로 호출하면, 에러가 발생합니다.
java Main.class
대신 다음을 사용합니다.
java Main
같은 코드가 1대의 PC에서 동작하지만, 다른 PC에서는 에러가 발생하고 있는 경우, 지금까지 발견된 최고의 솔루션은 다음과 같습니다.
javac HelloWorld.java
java -cp . HelloWorld
명령줄에서 클래스 경로를 지정하면 도움이 되었습니다.예를 들어 다음과 같습니다.
.
C:\temp
Temp.java 파일에 Temp.
C:\temp
하다public class Temp { public static void main(String args[]) { System.out.println(args[0]); } }
내
C:\temp
다음 명령어를 작성하여 Temp 클래스를 컴파일합니다.javac Temp.java
클래스를 하여 Java를 합니다.
-classpath
JRE:java -classpath C:\temp Temp Hello!
에러 메시지("메인 클래스를 찾을 수 없거나 로드할 수 없습니다")에 의하면, 다음의 2개의 카테고리의 문제가 있습니다.
- 기본 클래스를 찾을 수 없습니다.
- 기본 클래스를 로드할 수 없습니다(승인된 답변에서 이 사례에 대해 자세히 설명하지 않음).
정규화된 클래스 이름에 오타가 있거나 잘못된 구문이 있거나 제공된 클래스 경로에 없는 경우 기본 클래스를 찾을 수 없습니다.
클래스를 시작할 수 없는 경우 기본 클래스를 로드할 수 없습니다.일반적으로 주 클래스는 다른 클래스를 확장하며 해당 클래스는 제공된 클래스 경로에 없습니다.
예를 들어 다음과 같습니다.
public class YourMain extends org.apache.camel.spring.Main
camel-spring이 포함되지 않은 경우 이 오류가 보고됩니다.
다음 명령을 사용합니다.
java -cp . [PACKAGE.]CLASSNAME
예제:클래스 이름이 Hello.java에서 생성된 Hello.class인 경우 다음 명령을 사용합니다.
java -cp . Hello
Hello.java 파일이 패키지 com.demo 안에 있는 경우 다음 명령을 사용합니다.
java -cp . com.demo.Hello
JDK 8에서는 클래스 파일이 같은 폴더에 존재하는 경우가 많지만java
명령어는 classpath를 예상하기 때문에 classpath에 대한 참조로 현재 폴더를 추가합니다.
이 경우 다음과 같은 오류가 발생했습니다.
java -cp lib.jar com.mypackage.Main
와 함께 동작합니다.;
Windows 및:
UNIX의 경우:
java -cp lib.jar; com.mypackage.Main
Xdiag를 시도합니다.
Steve C의 답변은 가능한 사례를 잘 다루지만, 때로는 클래스를 찾을 수 없거나 로드할 수 없는지를 판단하는 것이 그렇게 쉽지 않을 수 있습니다.사용하다java -Xdiag
(JDK 7 이후).이것은 메시지 내용에 대한 힌트를 제공하는 훌륭한 스택 트레이스를 출력합니다.Could not find or load main class
message는 의미입니다.
예를 들어, 주 클래스를 찾을 수 없어서 주 클래스를 로드할 수 없었던 다른 클래스를 가리킬 수 있습니다.
때때로 문제의 원인이 본교과와 무관할 수 있기 때문에, 나는 이것을 어렵게 알아내지 않으면 안 되었다.이 라이브러리는 참조 라이브러리로 이동하여 다음과 같은 기능을 제공합니다.
주 클래스 xxx Linux를 찾거나 로드할 수 없습니다.
방금 그 참조를 삭제하고 다시 추가했는데, 다시 정상적으로 작동했습니다.
같은 문제가 발생하여 마침내 실수를 발견하였습니다:) 컴파일에 다음 명령을 사용했는데 올바르게 동작했습니다.
javac -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.java
그러나 이 명령어는 나에게 작동하지 않았습니다(메인 클래스를 찾거나 로드할 수 없었습니다).qrcode
):
java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode
마지막으로 클래스 경로 끝에 ':' 문자를 추가했더니 문제가 해결되었습니다.
java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode
이 예에서는 다음이 있습니다.
주 클래스 ?classpath를 찾거나 로드할 수 없습니다.
"-classpath"를 사용 중이지만 대시가 에서 사용되는 것과 동일한 대시가 아니기 때문입니다.java
명령 프롬프트에 표시됩니다.메모장에서 cmd로의 복사 및 붙여넣기 문제가 발생했습니다.
Maven을 사용하여 JAR 파일을 작성하는 경우 pom.xml 파일에 메인 클래스를 지정해야 합니다.
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>class name us.com.test.abc.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
제 경우 클래스 이름 대신 소스 파일 이름을 제공했기 때문에 오류가 발생하였습니다.
우리는 통역사에게 주요 메서드가 포함된 클래스 이름을 제공해야 합니다.
당신의 경우가 특히 제 경우와 비슷하다면 도움이 될 것입니다.초보자였던 저도 Java 프로그램을 실행하려고 할 때 이 문제에 부딪혔습니다.
이렇게 정리했습니다.
javac HelloWorld.java
그리고 저도 같은 확장자로 달리려고 했어요.
java Helloworld.java
제거했을 때.java
명령어를 다시 썼습니다.java HelloWorld
, 프로그램은 완벽하게 실행되었습니다.:)
모든 답변은 Windows 사용자를 대상으로 합니다.Mac의 경우 클래스 경로 구분자는 다음과 같습니다.:
,것은 아니다.;
. 를 사용하여 클래스 경로를 설정하는 오류로서;
Windows에서 Mac으로 전송되는지 확인하기 어려울 수 있습니다.
대응하는 Mac 명령어는 다음과 같습니다.
java -classpath ".:./lib/*" com.test.MyClass
이 예에서 패키지는com.test
및 alib
폴더는 클래스 경로에도 포함됩니다.
수업 경로를 잘못 설정했다고 생각했는데, 문제는 다음과 같이 입력했다는 것입니다.
java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool
다음 대신:
java -cp C:/java/MyClasses utilities/myapp/Cool
fully qualified의 의미는 풀 패키지명이 아닌 풀패스명을 포함하는 것이라고 생각했습니다.
클래스 파일 위치:C:\test\com\company
파일명: Main.class
완전 수식 클래스 이름: com.company.주된
명령줄 명령:
java -classpath "C:\test" com.company.Main
클래스 경로에는 \com\company가 포함되지 않습니다.
Windows 의 경우.;
CLASSPATH 값으로 설정합니다.
.(닷)은 "현재 디렉토리에서 검색"을 의미합니다.이것은 영구적인 해결책입니다.
또한 세트로 "1회" 설정할 수 있습니다.CLASSPATH=%CLASSPATH%;.
이 작업은 cmd 창이 열려 있는 한 계속됩니다.
다음은 구체적인 경우입니다.
Windows(Windows 7에서 테스트됨)에서는 특수 문자(예:á
클래스명과 패키지명으로 지정합니다.하지만 Linux는 그렇다.
이 사실을 알게 된 건 제가 이 건물을.jar
NetBeans에서 실행하려고 했습니다.NetBeans에서는 실행되었지만 명령줄에서는 실행되지 않았습니다.
이 문제를 해결한 것은 다음과 같습니다.
실행할 프로젝트/클래스를 마우스 오른쪽 버튼으로 클릭한 다음 Run As → Run Configurations(구성 실행)를 클릭합니다.그런 다음 다음과 같이 기존 구성을 수정하거나 새 구성을 추가해야 합니다.
Classpath 탭을 열고 Advanced...를 클릭합니다.버튼을 누른 다음 프로젝트의 폴더를 추가합니다.
먼저 이 명령을 사용하여 경로를 설정합니다.
set path="paste the set path address"
그런 다음 프로그램을 로드해야 합니다.저장된 드라이브에 "cd(폴더 이름)"를 입력하고 컴파일합니다.예를 들어 프로그램이 D드라이브에 저장되어 있는 경우 "D:" 라고 입력하고 Enter 키를 누른 후 "cd (folder name)" 라고 입력합니다.
를 실행할 때java
와 함께-cp
Windows PowerShell에 광고된 옵션에서 다음과 같은 오류가 발생할 수 있습니다.
The term `ClassName` is not recognized as the name of a cmdlet, function, script ...
PowerShell이 명령어를 받아들이려면-cp
옵션은 다음과 같이 따옴표로 묶어야 합니다.
java -cp 'someDependency.jar;.' ClassName
이 방법으로 명령어를 작성하면 Java가 classpath 인수를 올바르게 처리할 수 있습니다.
Java에서는 Java 인터프리터 실행 파일을 사용하여 명령줄에서 JVM을 실행하고 클래스 파일에서 프로그램을 시작하려고 할 때public static void main
(PSVM) JVM에 대한 classpath 매개 변수가 정확하고 클래스 파일이 클래스 경로에 있더라도 다음 오류가 발생할 수 있습니다.
오류: 주 클래스를 찾거나 로드할 수 없습니다.
이 문제는 PSVM이 있는 클래스 파일을 로드할 수 없는 경우에 발생합니다.그 이유 중 하나는 클래스가 인터페이스를 실장하거나 클래스 패스에 없는 다른 클래스를 확장하는 것입니다.일반적으로 클래스가 클래스 패스에 없는 경우 던져진 오류는 클래스 패스를 나타냅니다.그러나 사용 중인 클래스가 확장 또는 구현되면 Java는 클래스 자체를 로드할 수 없습니다.
참고 자료: https://www.computingnotes.net/java/error-main-class-not-found-or-loaded/
이거 진짜 처음부터 해야 돼요.src
폴더입니다.여기에 다음 명령줄을 입력합니다.
[name of the package].[Class Name] [arguments]
예를 들어, 당신의 클래스가CommandLine.class
코드는 다음과 같습니다.
package com.tutorialspoint.java;
/**
* Created by mda21185 on 15-6-2016.
*/
public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
그럼 네가 해야겠다cd
src 폴더와 실행할 필요가 있는 명령어는 다음과 같습니다.
java com.tutorialspoint.java.CommandLine this is a command line 200 -100
명령줄 출력은 다음과 같습니다.
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
좋아요, 이미 많은 답이 있지만 파일 허가가 범인일 수 있다는 건 아무도 언급하지 않았어요
실행 중 사용자는 JAR 파일 또는 경로의 디렉토리 중 하나에 액세스하지 못할 수 있습니다.예를 들어 다음과 같습니다.
Jar 파일 삽입/dir1/dir2/dir3/myjar.jar
JAR 파일을 소유한 사용자 1은 다음을 수행할 수 있습니다.
# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar
하지만 여전히 작동하지 않습니다.
# Running as User2
java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram
이는 실행 중인 사용자(User2)가 dir1, dir2, javalibs 또는 dir3에 액세스할 수 없기 때문입니다.User1이 파일을 표시해, 액세스 할 수 있는 경우, 유저2에 대해서는 에러가 발생합니다.
Java MongoDB JDBC 접속 테스트 중 비슷한 오류가 발생했습니다.향후에는 누구나 직접 두 개의 명령어를 살펴볼 수 있도록 최종 솔루션을 요약하여 더 진행할 수 있도록 하는 것이 좋다고 생각합니다.
Java 파일과 외부 의존관계(JAR 파일)가 존재하는 디렉토리에 있다고 가정합니다.
컴파일:
javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
- -cp - classpath 인수, 모든 종속 JAR 파일을 하나씩 전달합니다.
- *.java - 메인 메서드를 가진 Java 클래스 파일입니다.sdsd
실행:
java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
- 모든 종속 JAR 파일이 종료된 후 콜론(Unix) / 콤마(Windows)를 확인하십시오.
- 마지막에 확장자 없이 메인클래스 이름을 확인합니다(.class 또는 .java 없음).
여기에 기재되어 있는 솔루션으로는 이 문제를 해결할 수 없었습니다(단, 이 답변은 분명히 제 컨셉을 명확하게 했습니다).저는 이 문제에 두 번 직면했고 그때마다 (Eclipse IDE에서) 다른 솔루션을 시도했습니다.
- 첫째, 나는 많은 사람들을 만났다.
main
다양한 클래스의 메서드를 제공합니다.그래서 삭제했습니다.main
메서드를 지정합니다. - 둘째, 다음과 같은 솔루션을 시도했습니다.
- 메인 프로젝트 디렉토리를 오른쪽 클릭합니다.
- [ Finish ](완료)에서 [Source](소스)로 이동한 후 정리하고 기본 설정을 그대로 유지합니다.몇 가지 백그라운드 작업이 끝나면 기본 프로젝트 디렉토리로 이동합니다.
- 그 후, 프로젝트를 닫고, 다시 열고, 붐을 일으키자, 드디어 문제를 해결했습니다.
일부 온라인 컴파일러에서 사용하지 않으면 이 오류가 발생할 수 있습니다.public class [Classname]
다만class [Classname]
.
언급URL : https://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-mean
'sourcecode' 카테고리의 다른 글
플레인 파일을 실행 파일에 링크할 수 있습니까? (0) | 2022.08.31 |
---|---|
Linux에서 C에 디렉토리를 반복적으로 나열하는 방법 (0) | 2022.08.31 |
포인터 캐스팅 시 얼라인먼트에 대해 걱정해야 합니까? (0) | 2022.08.30 |
어레이의 주소가 C의 값과 같은 이유는 무엇입니까? (0) | 2022.08.30 |
"thread"가 없는 "while(true)"가 되는 이유는 무엇입니까?sleep'이 원인이 되어 Linux에서는 CPU 사용률이 100%이지만 Windows에서는 그렇지 않으면 Windows에서는 CPU 사용률이 100%가 되지 않습니다. (0) | 2022.08.30 |