it-swarm-korea.com

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

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

다음 오류가 발생합니다 : "오류 : 주 클래스 SpatialModel을 찾거나로드 할 수 없습니다". 내 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));
    }

}
332
Dave

.class 파일의 위치를 ​​클래스 경로에 추가해야합니다. 그래서, 현재 폴더에 있다면 클래스 패스에 .를 추가하십시오. 창 클래스 경로 구분 기호는 세미콜론 즉 ;입니다.

257
Saket

클래스가 패키지에있는 경우

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을 (를) 실행하려고 시도하지 않습니다. . 어쨌든 현재 클래스 경로에 있지 않습니다.

마지막으로 컴파일 된 ( .class) 버전이 실행되고 소스 코드 (. Java) 버전은 실행되지 않습니다. 그러므로 "CLASSPATH."

127
aliteralmind

오류가 발생하면 다음 두 가지를 시도 할 수 있습니다 : '주 클래스를 찾을 수 없거나로드 할 수 없습니다'

클래스 파일이 HelloWorld 프로그램 이름 d:\sample을 사용하여 다음 디렉토리에 저장되는 경우

  1. Java -cp d:\sample HelloWorld
  2. Java -cp . HelloWorld
58
Sudhakar Pabbati

Java 클래스 경로에 현재 디렉토리를 추가해야한다고 생각합니다.

Java -cp .:./Apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
36
Rafael Cordones

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
  • 창문에서도 똑같은 일이 벌어 질거야. 벌써 해봤 어.
30
msoliman

eclipse에서 작업하는 경우 프로젝트를 정리 (project\clean..clean all projects)하십시오.

25
cane

오류가 발생하면 classpath를 설정해야합니다.

메인 클래스 XYZ를 찾지 못했습니다.

예 :

E:\>set path="c:\programfiles\Java\jdk1.7.0_17\bin"
E:\>set classpath=%classpath%;.;
E:\>javac XYZ.Java
E:\>Java XYZ
17
user2318595

내가 실행하려고했기 때문에이 오류가 발생했습니다.

javac HelloWorld.Java && Java HelloWorld.class

.class를 제거해야 할 때 :

javac HelloWorld.Java && Java HelloWorld
16
Lri

buildPath를 확인하면 더 이상 존재하지 않는 라이브러리를 참조하고있는 것일 수 있습니다.

9
Samsky

JDK 1.6이 필요한 Java 응용 프로그램을 실행하려고하고 JDK 1.4에서 실행하려고하면이 오류가 발생합니다. 일반적으로 오래된 JRE에서 Java appliation을 실행하려고하면 실패 할 수 있습니다. 새로운 JRE/JDK를 설치하십시오.

7
Shaddu

나는이 질문이 리눅스에서 태그가 붙어 있지만, windows 에서, 당신은 ; 대신에 :로 당신의 cp 인수를 분리 할 필요가 있을지도 모른다는 것을 알고있다.

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

7
Snekse

이 오류가 발생하고 Maven을 사용하여 Jars를 빌드하면 src/main/Java/에 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에 클래스를 포함시키지 않았기 때문입니다.

6
Mike S

Java -verbose:class HelloWorld는 어떤 클래스가로드되고 있는지를 이해하는 데 도움이 될 수 있습니다.

또한 앞서 언급했듯이 완전한 이름 (예 : 패키지 포함)을 부르는 것을 잊지 마십시오.

5
Jose Alban

프로젝트> 정리를 클릭하고 BuildPath> 라이브러리에 올바른 라이브러리가 있는지 확인하십시오.

5
Giri

문제는 주요 기능에 관한 것이 아닙니다. 체크 아웃

javac -d . -cp ./Apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.Java     VensimHelper.Java VensimException.Java VensimContextRepository.Java

출력하고 실행하십시오.

5
ymutlu

Eclipse를 사용하는 경우 ... 주 클래스 파일의 이름을 변경하고 해당 오류가 발생했습니다. 나는 "Run As"컨 피규 레이터로 가서 그 프로젝트의 클래스 경로 아래에 클래스 경로에 두 파일을 모두 나열했습니다. 나는 이름이 바뀐 오래된 클래스를 제거하고 새로운 이름을 가진 클래스를 떠났습니다. 그리고 컴파일되고 실행되었습니다.

4
Argyle Ghost

많은 사람들이 생각하는 것보다 간단하다면, 나는 포함했다 :)

cd to Project Folder/src/package 거기에 yourClass.Java가 표시되면 javac yourClass.Java을 실행하여 yourClass.class를 만든 다음 src 폴더와 build 폴더로 이동합니다. 거기에 폴더를 실행할 수 있습니다 Java package.youClass

Mac에서 터미널을 사용하고 있거나 Windows의 명령 프롬프트를 사용하여 동일한 작업을 수행 할 수 있습니다.

4
don

Eclipse에 기존 프로젝트를 가져 왔을 때이 문제가 발생했습니다. 패키지 안의 파일이 아니라 패키지 외부의 모든 파일이 복사됩니다. 따라서, 실행> 구성 실행을 시도 할 때 패키지에 없기 때문에 주 방법을 찾을 수 없습니다. 필자가 한 모든 것은 파일을 패키지에 복사 한 것이므로 Eclipse는 기본 방법을 감지 할 수있었습니다. 궁극적으로 Java 파일이 올바른 패키지에 있는지 확인하여 Eclipse가 기본 메소드를 찾을 수 있는지 확인하십시오.

4
JohnMerlino

나는 Java 1.8을 사용하고 있었고 netbeans에서 "Build and clean"을 눌렀을 때 갑자기이 오류가 발생했다. 잠시 동안 다시 1.7로 전환하고 Ok를 클릭 한 다음 속성을 다시 열고 1.8로 다시 전환하여 모든 것이 완벽하게 작동했다.

나는 이것으로 누군가를 도울 수 있기를 바랄 뿐이다. 이러한 오류는 꽤 시간이 많이 걸릴 수있다.

4
Maxim Geerinck

Windows에서 비슷한 문제가 발생했습니다. 클래스 경로와 관련되어 있습니다. 명령 행에서 Java 파일 (* .Java 및 * .class)이있는 디렉토리로 이동 한 다음 명령으로 다시 시도하십시오.

1
edwindh

Anypoint Studio (Eclipse 기반 IDE)를 사용합니다. Java 코드를 실행하는 동안 완전히 다른 무언가가 실행된다는 것을 알게 될 때까지는 모든 것이 잘 돌아갔다. 그런 다음 .class 파일을 삭제했습니다. 이 시점이 지나면이 질문의 제목에서 오류 메시지가 나타납니다. 프로젝트를 청소해도 문제가 해결되지 않았습니다.

IDE을 다시 시작한 후 모든 것이 잘 돌아갔습니다.

1
Zsolti

오늘이 문제가 해결되었습니다.

cd /path/to/project
cd build
rm -r classes

그런 다음이를 정리하고 빌드하여 필요한 개별 파일을 실행하십시오.

1
Luc