오류: 주 클래스를 찾거나 로드할 수 없습니다.
시뮬레이션 모델링 패키지인 Vensim용 공유 객체와 Java를 인터페이스하기 위해 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
"Error: Could not find or load main class Spatial Model" (오류: 메인 클래스 Spatial Model을 찾거나 로드할 수 없습니다)라는 오류가 나타납니다.SpatialModel.java 코드에는 '메인' 메서드가 포함되어 있기 때문에(아래) 문제가 무엇인지 모르겠습니다.누구라도 도와주시겠습니까?고마워요.
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
파일을 클래스 패스에 저장합니다.현재 "이렇게 하면 됩니다."를 합니다..
츠키노 클래스 패스 세퍼레이터입니다.;
.
클래스가 패키지에 포함되어 있는 경우
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
디렉토리는 클래스 경로에 존재해야 합니다.예에서는 " " 입니다..
current의 , 이는, 「(디렉토리) 가 있습니다.thepackagename
재한한다
하게 말하면, 이 은 「」이 아니고, 「」가 .TheClassName
...thepackagename.TheClassName
를하려고 .TheClassName
같은 이름의 클래스가 존재하지 않기 때문에는 동작하지 않습니다.어쨌든 현재 클래스패스에는 없습니다.
마지막으로 소스 코드(.java) 버전이 아니라 컴파일된(.class) 버전이 실행됩니다.그래서 CLASSPATH.
'주 클래스를 찾을 수 없거나 로드할 수 없습니다'라는 오류가 발생할 때 이 두 가지를 시도해 보십시오.
이 「」와 함께 에 보존되어 .HelloWorld
'''d:\sample
java -cp d:\sample HelloWorld
java -cp . HelloWorld
현재 디렉토리를 Java 클래스 패스에 추가해야 합니다.
java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
javac 및 java 명령어에 classpath를 포함해야 합니다.
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
- 창문에서도 같은 것이 동작합니다.이미 시도해 보았습니다.
당신이.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
존재하지 않는 라이브러리를 참조하고 있을 가능성이 있습니다.
이 오류가 발생하여 Maven을 사용하여 Jars를 빌드하고 있다면 Java 클래스가 없을 가능성이 높습니다.src/main/java/
.
이클립스에서 프로젝트를 만들었습니다.츠키다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에 당신의 클래스가 전혀 포함되지 않았기 때문입니다.
이 질문에 Linux 태그가 붙어 있는 것은 알고 있습니다만, Windows 에서는, cparg 를 cparg 로 분리할 필요가 있습니다.;
:
.
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 를 인스톨 해 주세요.
문제는 당신의 주요 기능에 관한 것이 아닙니다.체크 아웃
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
출력하여 실행합니다.
[ Project ]> [ Clean ]를 클릭하여 [Build Path]> [ Libraries ]의 올바른 라이브러리를 확인합니다.
java -verbose:class HelloWorld
로딩되는 클래스를 이해하는 데 도움이 될 수 있습니다.
또, 전술한 바와 같이, 완전 수식명(즉, 패키지 포함)을 호출하는 것을 잊지 말아 주세요.
이 문제는 기존 프로젝트를 이클립스로 Import 했을 때 발생했습니다.이 경우 패키지의 파일이 아닌 패키지 외부에 모두 복사됩니다.따라서 run > run configurations를 시도해도 패키지에 포함되어 있지 않기 때문에 메인 메서드를 찾을 수 없었습니다.내가 한 일은 파일들을 패키지에 복사하는 것 뿐이었고 이클립스는 주요 방법을 탐지할 수 있었다.따라서 최종적으로 Java 파일이 올바른 패키지에 포함되어 있는지 확인함으로써 Eclipse가 주요 방법을 찾을 수 있는지 확인하십시오.
많은 사람들이 생각하는 것보다 너무 단순하다면, 나도 포함시켰다:)
cd 를 클릭하면 Class.java 가 표시되고 cd 가 생성됩니다.이것에 의해, 폴더로부터 cd 가 작성되어 그 폴더에서는 실행할 수 있습니다.
Mac에서 터미널을 사용 중이거나 Windows에서 명령 프롬프트를 사용하여 동일한 작업을 수행할 수 있습니다.
이클립스를 사용하는 경우...메인 클래스 파일의 이름을 변경했는데, 에러가 발생했습니다."Run As" 컨피규레이터로 이동하여 해당 프로젝트의 클래스 경로 아래에 두 파일이 모두 클래스 경로에 나열되어 있습니다.이름을 바꾼 오래된 클래스는 삭제하고 새 이름을 가진 클래스는 그대로 컴파일하여 정상적으로 실행되었습니다.
Java 1.8을 사용하고 있었는데 NetBeans에서 "Build and Clean"을 눌렀을 때 갑자기 이 오류가 발생했습니다.잠시 1.7로 다시 전환하고 OK를 클릭하여 속성을 다시 열고 1.8로 전환하면 모든 것이 정상적으로 동작합니다.
이러한 오류는 시간이 많이 걸릴 수 있기 때문에 제가 이 문제를 해결할 수 있기를 바랍니다.
이것으로 오늘의 문제가 해결되었습니다.
cd /path/to/project
cd build
rm -r classes
그런 다음 파일을 정리하고 빌드한 후 필요한 개별 파일을 실행합니다.
Windows에서도 클래스 패스와 관련된 문제가 있습니다.명령줄에서 Java 파일(*.java 및 *.class)이 있는 디렉토리까지 이동한 후 명령을 사용하여 다시 시도하십시오.
Anypoint Studio(Eclipse 기반 IDE)를 사용하고 있습니다.제 경우 자바 코드를 실행하는 동안 전혀 다른 것이 실행된다는 것을 알기 전까지는 모든 것이 잘 작동했습니다.그런 다음 .class 파일을 삭제했습니다.그 후, 이 질문의 제목으로부터 에러 메세지가 표시되었습니다.프로젝트를 청소한다고 문제가 해결되지는 않았다.
IDE를 재기동하면, 모든 것이 정상적으로 동작했다.
언급URL : https://stackoverflow.com/questions/7485670/error-could-not-find-or-load-main-class
'programing' 카테고리의 다른 글
Linux에서 C에서 프로세스의 CPU 사용량을 PID별로 계산하는 방법은 무엇입니까? (0) | 2022.08.01 |
---|---|
Firebase + Vue를 사용하여 웹 앱을 구축할 때 Vuex가 꼭 필요한가요? (0) | 2022.07.31 |
Vue.js - 컴포넌트 데이터가 갱신되지 않음 (0) | 2022.07.31 |
Vue 저장소의 변환에 두 번째 매개 변수를 보낼 수 없습니다. (0) | 2022.07.31 |
개체 목록을 속성별로 정렬하는 방법 (0) | 2022.07.31 |