Σφάλμα: Δεν μπόρεσε να βρει ή να φορτώσει την κύρια κλάση

Έχω πρόβλημα με τη μεταγλώττιση και την εκτέλεση του κώδικα Java μου, που προορίζεται να μου επιτρέψει να διασυνδέσω τη Java με ένα κοινόχρηστο αντικείμενο για το Vensim, ένα πακέτο μοντελοποίησης προσομοίωσης.

Ο παρακάτω κώδικας μεταγλωττίζεται χωρίς σφάλμα:

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 περιέχει μια μέθοδο 'main' (παρακάτω), οπότε δεν είμαι σίγουρος ποιο είναι το πρόβλημα - μπορεί κάποιος να με βοηθήσει; Ευχαριστώ.

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

}
Λύση

Πρέπει να βεβαιωθείτε ότι έχετε προσθέσει τη θέση του αρχείου .class στο classpath σας. Έτσι, αν βρίσκεται στον τρέχοντα φάκελο, προσθέστε το . στο classpath σας. Σημειώστε ότι το διαχωριστικό του μονοπατιού κλάσεων των Windows είναι μια άνω τελεία, δηλαδή ένα ;.

Σχόλια (7)

Πιστεύω ότι πρέπει να προσθέσετε τον τρέχοντα κατάλογο στο μονοπάτι τάξεων της Java

java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Σχόλια (5)

Το πρόβλημα δεν αφορά την κύρια λειτουργία σας. Ελέγξτε για

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

και εκτελέστε την.

Σχόλια (0)