377 Stimmen

Fehler: Die Hauptklasse konnte nicht gefunden oder geladen werden

Ich habe Probleme beim Kompilieren und Ausführen meines Java-Codes, der es mir ermöglichen soll, Java mit einem gemeinsamen Objekt für Vensim, einem Simulationsmodellierungspaket, zu verbinden.

Der folgende Code lässt sich ohne Fehler kompilieren:

javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java     VensimHelper.java VensimException.java VensimContextRepository.java

Wenn ich jedoch versuche, das Folgende auszuführen:

java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars

Ich erhalte die folgende Fehlermeldung: "Fehler: Die Hauptklasse SpatialModel konnte nicht gefunden oder geladen werden ". Mein SpatialModel.java-Code enthält eine "main"-Methode (siehe unten), daher bin ich mir nicht sicher, wo das Problem liegt - kann mir bitte jemand helfen? Danke!

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));
    }

}

32voto

cane Punkte 824

Wenn Sie in Eclipse arbeiten, machen Sie einfach eine Bereinigung ( project\clean.. clean all projects ) des Projekts.

20voto

Lri Punkte 25192

Ich habe diese Fehlermeldung erhalten, weil ich versucht habe, Folgendes auszuführen

javac HelloWorld.java && java HelloWorld.class

wenn ich hätte entfernen sollen .class :

javac HelloWorld.java && java HelloWorld

20voto

user2318595 Punkte 201

Sie müssen den Klassenpfad festlegen, wenn Sie die Fehlermeldung erhalten:

Die Hauptklasse XYZ konnte nicht gefunden oder geladen werden.

Zum Beispiel:

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

12voto

Samsky Punkte 438

Prüfen Sie Ihr BuildPath kann es sein, dass Sie auf eine Bibliothek verweisen, die nicht mehr existiert.

10voto

Mike S Punkte 11071

Wenn Sie diese Fehlermeldung erhalten und Sie Maven zur Erstellung von Jars verwenden haben, dann ist die Wahrscheinlichkeit groß, dass Sie Ihre Java-Klassen einfach nicht in src/main/java/ .

In meinem Fall habe ich mein Projekt in Eclipse erstellt, das standardmäßig auf src (anstelle von src/main/java/ .

So kam ich zu folgendem Ergebnis mypackage.morepackage.myclass und eine Verzeichnisstruktur, die wie folgt aussieht src/mypackage/morepackage/myclass was an sich nichts Schlechtes ist. Aber wenn Sie laufen mvn clean install sucht es nach src/main/java/mypackage/morepackage/myclass . Es wird die Klasse nicht finden, aber es wird auch kein Fehler auftreten. So wird es erfolgreich zu bauen und Sie, wenn Sie Ihre ausgegebenen Jar ausführen das Ergebnis ist:

Error: Could not find or load main class mypackage.morepackage.myclass

Weil es Ihre Klasse einfach nie in das Jar-Paket aufgenommen hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X