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

}

6voto

ymutlu Punkte 6185

Das Problem liegt nicht in Ihrer Hauptfunktion. Überprüfen Sie für

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

Ausgabe und führen Sie sie aus.

5voto

JohnMerlino Punkte 3822

Dieses Problem trat bei mir auf, als ich ein bestehendes Projekt in Eclipse importierte. Dabei wurden alle Dateien kopiert, die sich nicht im Paket befanden, sondern außerhalb des Pakets. Als ich also versuchte, run > run configurations auszuführen, konnte die main-Methode nicht gefunden werden, weil sie nicht im Paket enthalten war. Ich habe die Dateien lediglich in das Paket kopiert, und Eclipse konnte die Hauptmethode dann erkennen. Stellen Sie also sicher, dass Eclipse Ihre Hauptmethode finden kann, indem Sie sicherstellen, dass sich Ihre Java-Dateien im richtigen Paket befinden.

5voto

don Punkte 186

Wenn es so einfach ist, wie viele Leute denken, mich eingeschlossen :)

cd an Project Folder/src/package Dort sollten Sie yourClass.java sehen und dann ausführen javac yourClass.java die IhreClass.class erstellt und dann cd aus der src Ordner und in den Ordner build Dort können Sie Folgendes ausführen java package.youClass

Ich verwende das Terminal auf dem Mac oder Sie können die gleiche Aufgabe mit der Eingabeaufforderung unter Windows erledigen

5voto

Argyle Ghost Punkte 141

Wenn Sie Eclipse verwenden... Ich habe meine Hauptklassendatei umbenannt und diesen Fehler erhalten. Ich ging zum "Ausführen als"-Konfigurator und unter dem Klassenpfad für dieses Projekt waren beide Dateien im Klassenpfad aufgeführt. Ich entfernte die alte Klasse, die ich umbenannt hatte, und ließ die Klasse mit dem neuen Namen übrig, und sie wurde kompiliert und lief einwandfrei.

2voto

Luc Punkte 4101

Damit war das Problem für mich heute gelöst:

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

Dann clean&build es und führen Sie die einzelnen Dateien, die Sie benötigen.

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