오류 : 기본 클래스를 찾거나로드 할 수 없습니다.
이 질문에는 이미 답변이 있습니다.
Java 코드를 컴파일하고 실행하는 데 문제가 있습니다. 시뮬레이션 모델링 패키지 인 Vensim의 공유 객체와 Java를 인터페이싱 할 수 있습니다.
다음 코드는 오류없이 컴파일됩니다.
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
그러나 다음을 실행하려고하면 :
java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
"오류 : 기본 클래스 SpatialModel을 찾거나로드 할 수 없습니다"오류가 발생합니다. 내 SpatialModel.java 코드에는 'main'메서드 (아래)가 포함되어 있으므로 문제가 무엇인지 잘 모르겠습니다. 누구든지 나를 도울 수 있습니까? 감사.
import java.io.File;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.Logger;
public class SpatialModel {
private VensimHelper vh;
public static final String DLL_LIBNAME_PARAM = "vensim_lib_nam";
public static final String MODEL_PATH_PARAM = "vensim_model_path";
private final static int VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT = 10;
public SpatialModel() throws SpatialException {
String libName = System.getProperty(DLL_LIBNAME_PARAM);
String modelPath = System.getProperty(MODEL_PATH_PARAM);
if(libName == null || libName.trim().equals("")) {
log.error("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM);
throw new SpatialException("Vensim library name has to be set with -D" + DLL_LIBNAME_PARAM);
}
if(modelPath == null || modelPath.trim().equals("")) {
log.error("Model path has to set with -D" + MODEL_PATH_PARAM);
throw new SpatialException("Model path ahs to be set with -D" + MODEL_PATH_PARAM);
}
for (int i = 0; i < VENSIM_CONTEXT_CREATION_MAX_FAILURE_COUNT && vh == null; i++) {
try {
log.info("creating new vensim helper\n\tdll lib: " + libName + "\n\tmodel path: " + modelPath);
vh = new VensimHelper(libName, modelPath);
} catch (Throwable e) {
log.error("An exception was thrown when initializing Vensim, try: " + i, e);
}
}
if (vh == null) {
throw new SpatialException("Can't initialize Vensim");
}
}
public static void main(String[] args) throws VensimException {
long before = System.currentTimeMillis();
String libName = System.getProperty(DLL_LIBNAME_PARAM);
String modelPath = System.getProperty(MODEL_PATH_PARAM);
if (libName == null) {
libName = "libvensim";
}
if(modelPath == null) {
modelPath = "~/BassModel.vmf";
}
System.setProperty(DLL_LIBNAME_PARAM, libName);
System.setProperty(MODEL_PATH_PARAM, modelPath);
if (args.length > 0 && args[0].equals("info")) {
System.out.println(new VensimHelper(libName, modelPath).getVensimInfo());
} else if (args.length > 0 && args[0].equals("vars")) {
VensimHelper helper = new VensimHelper(libName, modelPath);
String[] vars = helper.getVariables();
for (String var : vars) {
System.out.println(helper.getVariableInfo(var));
}
} else {
File f = new File(".");
System.out.println(f.getAbsolutePath());
SpatialModel sm = new SpatialModel();
}
System.out.println("Execution time: " + (System.currentTimeMillis() - before));
}
}
.class파일 의 위치를 클래스 경로에 추가해야합니다 . 따라서 현재 폴더 .에 있으면 클래스 경로에 추가 하십시오. Windows 클래스 경로 구분 기호는 세미콜론입니다 (예 : a) ;.
수업이 패키지에있는 경우
package thepackagename;
public class TheClassName {
public static final void main(String[] cmd_lineParams) {
System.out.println("Hello World!");
}
}
그런 다음 전화 :
java -classpath . TheClassName
결과 Error: Could not find or load main class TheClassName. 완전한 이름으로 호출해야하기 때문입니다.
java -classpath . thepackagename.TheClassName
그리고이 thepackagename디렉토리는 클래스 경로에 존재해야합니다. 이 예 .에서 현재 디렉토리를 의미하는 전체 클래스 경로입니다. 따라서이 특정 예제는 thepackagename존재 하는 디렉토리에서 호출해야 합니다.
명확하게하기 위해,이 클래스의 이름이 아닌 TheClassName, 그것은이다 thepackagename.TheClassName. 해당 이름을 가진 클래스가TheClassName 없기 때문에 실행을 시도 할 수 없습니다 . 어쨌든 현재 클래스 경로에 없습니다.
마지막으로 소스 코드 ( .java) 버전 이 아니라 컴파일 된 ( .class) 버전이 실행 됩니다. 따라서 "CLASSPATH"
오류가 발생하면 다음 두 가지를 시도해 볼 수 있습니다.
클래스 파일이 HelloWorld프로그램 이름으로 다음 디렉토리에 저장된 경우d:\sample
java -cp d:\sample HelloWorldjava -cp . HelloWorld
현재 디렉토리를 Java 클래스 경로에 추가해야한다고 생각합니다.
java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
javac 및 java 명령에 클래스 경로를 포함시켜야합니다.
javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main
당신이 다음을 가지고 있다고 가정
패키지 이름 : com.test 클래스 이름 : Hello (주요 파일) 파일은 "src / com / test / Hello.java"에 있습니다.
외부 디렉토리에서 :
$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
- 창문에서도 같은 것이 작동합니다. 나는 이미 시도했습니다.
Eclipse에서 작업하는 경우 project\clean.. clean all projects프로젝트를 정리 ( )하십시오.
오류가 발생하면 클래스 경로를 설정해야합니다.
메인 클래스 XYZ를 찾거나로드 할 수 없습니다
예를 들면 다음과 같습니다.
E:\>set path="c:\programfiles\Java\jdk1.7.0_17\bin"
E:\>set classpath=%classpath%;.;
E:\>javac XYZ.java
E:\>java XYZ
실행하려고했기 때문에이 오류가 발생했습니다.
javac HelloWorld.java && java HelloWorld.class
내가 제거해야 할 때 .class:
javac HelloWorld.java && java HelloWorld
를 확인하십시오 BuildPath. 더 이상 존재하지 않는 라이브러리를 참조하고있을 수 있습니다.
이 질문에 Linux 태그가 붙어 있다는 것을 알고 있지만 Windows 에서는 cp args ;대신 :.
java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar;./vensim.jar SpatialModel vars
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html
JDK 1.6이 필요한 Java 애플리케이션을 실행하려고하고 JDK 1.4에서 실행하려고하면이 오류가 발생합니다. 일반적으로 이전 JRE에서 Java 애플리케이션을 실행하려고하면 실패 할 수 있습니다. 새 JRE / JDK를 설치하십시오.
이 오류가 발생하고 Maven을 사용하여 Jar를 빌드 하는 경우 Java 클래스가없는 경우가 있습니다 src/main/java/.
필자의 경우 Eclipse에서 프로젝트를 만들었 src습니다 src/main/java/.
그래서 나는 본질적으로 아무런 문제가없는 mypackage.morepackage.myclass것과 같은 디렉토리 구조와 같은 것으로 끝났습니다 src/mypackage/morepackage/myclass. 그러나 당신이 mvn clean install그것을 실행할 때 찾을 것입니다 src/main/java/mypackage/morepackage/myclass. 클래스를 찾지 못하지만 오류도 발생하지 않습니다. 따라서 성공적으로 빌드되고 출력 된 Jar를 실행할 때 결과는 다음과 같습니다.
Error: Could not find or load main class mypackage.morepackage.myclass
단순히 패키지 된 Jar에 클래스를 포함시키지 않았기 때문입니다.
문제는 주요 기능에 관한 것이 아닙니다. 확인
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
출력하고 실행하십시오.
프로젝트> 정리하고 BuildPath> 라이브러리에 올바른 라이브러리가 있는지 확인하십시오.
java -verbose:class HelloWorld 어떤 클래스가로드되고 있는지 이해하는 데 도움이 될 수 있습니다.
또한 앞에서 언급했듯이 정규화 된 이름 (예 : 패키지 포함)을 호출해야합니다.
이 문제는 기존 프로젝트를 Eclipse로 가져올 때 발생했습니다. 결과는 패키지가 아닌 패키지 외부의 모든 파일을 복사 한 것입니다. 따라서 run> run 구성을 시도했을 때 패키지에 없었기 때문에 주요 방법을 찾을 수 없었습니다. 내가 한 일은 파일을 패키지에 복사하는 것만으로 Eclipse가 주요 방법을 감지 할 수있었습니다. 따라서 궁극적으로 java 파일이 올바른 패키지에 있는지 확인하여 Eclipse가 기본 메소드를 찾을 수 있는지 확인하십시오.
많은 사람들이 생각하는 것보다 그렇게 간단하다면, 나는 포함했다 :)
Project Folder/src/package거기에 CD를 가져 가면 yourClass.java가 실행 javac yourClass.java되고 yourClass.class가 생성되고 src폴더에서 CD build를 실행할 수 있습니다.java package.youClass
Mac에서 터미널을 사용하고 있거나 Windows에서 명령 프롬프트를 사용하여 동일한 작업을 수행 할 수 있습니다
Eclipse를 사용하는 경우 ... 주 클래스 파일의 이름을 바꾸고 오류가 발생했습니다. "Run As"구성 자로 가서 해당 프로젝트의 클래스 경로 아래에 클래스 경로에 두 파일이 모두 나열되었습니다. 나는 이름을 바꾼 오래된 클래스를 제거하고 새로운 이름을 가진 클래스를 떠났고 컴파일하고 제대로 실행했습니다.
Java 1.8을 사용하고 있었고 NetBeans에서 "빌드 및 정리"를 누를 때이 오류가 갑자기 발생했습니다. 잠시 1.7로 다시 전환하고 확인을 클릭 한 후 속성을 다시 열고 1.8로 다시 전환하면 모든 것이 완벽하게 작동했습니다.
이러한 오류는 시간이 많이 걸리므로 누군가 도와 줄 수 있기를 바랍니다.
이것은 오늘 나를 위해 문제를 해결했습니다.
cd /path/to/project
cd build
rm -r classes
그런 다음 정리하고 빌드하고 필요한 개별 파일을 실행하십시오.
Windows에서도 비슷한 문제가 있으며 클래스 경로와 관련이 있습니다. 명령 행에서 Java 파일 (* .java 및 * .class)이있는 디렉토리를 탐색 한 후 명령으로 다시 시도하십시오.
Anypoint Studio (Eclipse 기반 IDE)를 사용합니다. 필자의 경우 Java 코드를 실행하는 동안 완전히 다른 무언가가 실행된다는 것을 알 때까지 모든 것이 잘 작동했습니다. 그런 다음 .class 파일을 삭제했습니다. 이 시점 이후 나는이 질문의 제목에서 오류 메시지를 받았습니다. 프로젝트를 청소해도 문제가 해결되지 않았습니다.
IDE를 다시 시작한 후 모든 것이 잘 작동했습니다.
참고 URL : https://stackoverflow.com/questions/7485670/error-could-not-find-or-load-main-class
'development' 카테고리의 다른 글
| N 아래에 모든 소수를 나열하는 가장 빠른 방법 (0) | 2020.03.02 |
|---|---|
| LINQ로 주문 유지 (0) | 2020.03.02 |
| github.com 사용자에게 메시지를 남기는 방법 (0) | 2020.03.02 |
| 둘러싼 클래스 Java가 아님 (0) | 2020.03.02 |
| HTML의 새 탭에서 링크를 여는 방법은 무엇입니까? (0) | 2020.03.02 |