programing

오류: 주 클래스를 찾거나 로드할 수 없습니다.

goodcopy 2022. 7. 31. 22:16
반응형

오류: 주 클래스를 찾거나 로드할 수 없습니다.

시뮬레이션 모델링 패키지인 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

  1. java -cp d:\sample HelloWorld
  2. 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

반응형