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

}

9voto

Snekse Punkte 14946

Ich weiß, dass diese Frage mit linux getaggt wurde, aber auf Windows müssen Sie die cp-Args möglicherweise mit einem ; anstelle einer : .

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

8voto

Shaddu Punkte 91

Wenn Sie versuchen, eine Java-Anwendung auszuführen, die JDK 1.6 benötigt, und Sie versuchen, sie mit JDK 1.4 auszuführen, werden Sie auf diesen Fehler stoßen. Im Allgemeinen kann der Versuch, eine Java-Anwendung mit einer alten JRE auszuführen, fehlschlagen. Versuchen Sie, ein neues JRE/JDK zu installieren.

6voto

Giri Punkte 209

Projekt > Bereinigen und stellen Sie dann sicher, dass BuildPath > Libraries die richtige Bibliothek enthält.

6voto

Maxim Punkte 3766

Ich habe Java 1.8 verwendet, und dieser Fehler trat plötzlich auf, als ich in NetBeans auf "Build and clean" drückte. Ich wechselte für einen kurzen Moment wieder zu 1.7, klickte auf OK, öffnete die Eigenschaften erneut und wechselte zurück zu 1.8, und alles funktionierte einwandfrei.

Ich hoffe, ich kann jemandem damit helfen, denn diese Fehler können sehr zeitaufwendig sein.

6voto

Jose Alban Punkte 6403

java -verbose:class HelloWorld kann Ihnen helfen zu verstehen, welche Klassen geladen werden.

Denken Sie auch daran, wie bereits erwähnt, den vollständig qualifizierten Namen aufzurufen (d. h. das Paket einzuschließen).

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