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

}

2voto

edwindh Punkte 99

Ich habe ein ähnliches Problem in Windows, es ist im Zusammenhang mit dem Klassenpfad. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem sich Ihre Java-Datei befindet (*.java und *.class), und versuchen Sie es dann erneut mit Ihren Befehlen.

2voto

Zsolti Punkte 1493

Ich verwende Anypoint Studio (eine auf Eclipse basierende IDE). In meinem Fall funktionierte alles gut, bis ich herausfand, dass beim Ausführen des Java-Codes etwas völlig anderes ausgeführt wird. Dann habe ich die .class-Dateien gelöscht. Danach bekam ich die Fehlermeldung aus dem Titel dieser Frage. Das Bereinigen des Projekts hat das Problem nicht gelöst.

Nach dem Neustart der IDE funktionierte alles wieder einwandfrei.

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