Eroare: nu se Poate găsi sau de încărcare clasa principala

Am probleme la compilarea și rularea meu de cod Java, destinat pentru a-mi permite să interfață Java cu o comună obiect pentru Vensim, o simulare modelare pachet.

Următorul cod compilează fără eroare:

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

Cu toate acestea, atunci când am încercați să executați următoarele:

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

I a lua următoarea eroare: "Eroare: nu se Poate găsi sau de sarcină principală clasa SpatialModel ". Mea SpatialModel.java codul nu conține o 'principal' metoda (mai jos), așa că am'm nu stiu sigur care este problema - poate cineva te rog ajută-mă? Multumesc.

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

}
Soluția

Trebuie să asigurați-vă că adăugați locația dumneavoastră.clasa dosarul lui la clase. Deci, dacă în directorul curent, se adauga . la classpath. Rețineți că Windows classpath separator este un semi-colon, adică un ;.

Comentarii (7)

În cazul în care clasa este într-un pachet

package thepackagename;

public class TheClassName {
  public static final void main(String[] cmd_lineParams)  {
     System.out.println("Hello World!");
  } 
}

Atunci de asteptare:

java -classpath . TheClassName

rezultate în Eroare: nu se Poate găsi sau de sarcină principală clasa TheClassName. Acest lucru este pentru că trebuie să fie numit cu complet calificat nume:

java -classpath . thepackagename.TheClassName

Și asta pentru thepackagenamedirector trebuie să existe în classpath. În acest exemplu,., sensul directorul curent, este totalitatea de clase. Prin urmare, acest exemplu trebuie să fie numit de directorul în carethepackagename` există.

Să fie clar, numele din această clasă nu este TheClassName, L's thepackagename.TheClassName. Încercarea de a executa TheClassName nu funcționează, pentru că nu clasa a avea acest nume există. Nu pe curent classpath oricum.

În cele din urmă, rețineți că compilat (.clasa) versiune este executat, nu codul sursă (.java) versiune. Prin urmare, "CLASSPATH."

Comentarii (4)

Puteți încerca aceste două atunci când sunt obtinerea de eroare: 'nu a putut găsi sau de sarcină principală clasa'

În cazul în care clasa de fișier este salvat în următorul director cu HelloWorldnumele programului d:\sample`

  1. java -cp d:\sample HelloWorld
  2. java -cp . HelloWorld`
Comentarii (3)

Cred că aveți nevoie să adăugați directorul curent la Java-classpath

java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Comentarii (5)

Trebuie să includă classpath la javac și java comenzi

javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main

să presupunem că aveți următoarele

Pachetul Nume: com.test Clasa Nume: Hello (Având principal) fișierul se află în interiorul "src/com/test/Salut.java"

din exterior director:

$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
  • În windows același lucru va fi de lucru prea, am incercat deja
Comentarii (0)

Dacă locul de muncă în Eclipse, face doar o curățire (proiect\curat..`curat toate proiectele) a proiectului.

Comentarii (0)

Trebuie să setați classpath dacă primiți eroarea:

nu a Putut găsi sau de sarcină principală clasa XYZ

De exemplu:

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

Am primit această eroare pentru că am fost încercarea de a rula

javac HelloWorld.java && java HelloWorld.class

când ar fi trebuit eliminat .clasa:

javac HelloWorld.java && java HelloWorld
Comentarii (2)

Verifica BuildPath, ar putea fi faptul că sunteți referire la o bibliotecă care nu mai există.

Comentarii (0)

Daca're obtinerea această eroare și vă aflați folosind Maven pentru a construi Borcane, atunci există o bună șansă că pur și simplu nu au clase Java în src/main/java/`.

În cazul meu, am creat proiectul meu în Eclipse, care implicit la src (mai degrabă decât src/main/java/.

Așa că am ajuns cu ceva de genul mypackage.morepackage.myclass și o structură de directoare privind ca src/mypackage/morepackage/myclass, care are în mod inerent greșit cu nimic. Dar atunci când tu a alerga mvn clean install se va uita pentru src/main/java/mypackage/morepackage/myclass. Acesta nu va găsi clasa dar nu o't eroare, fie. Asa ca va construi cu succes și când scoase Borcan rezultatul este:

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

Pentru că pur și simplu nu sunt incluse clasa ambalate în Borcan.

Comentarii (2)

Dacă încercați să executați o aplicație java care are nevoie de JDK 1.6 și vă sunt încercarea de a rula pe JDK 1.4, va veni peste această eroare. În general, încercarea de a rula o aplicație Java pe vechi JRE poate eșua. Încercați instalarea de noi JRE/JDK.

Comentarii (0)

Stiu ca aceasta intrebare a fost etichetat cu linux, dar pe windows, s-ar putea nevoie pentru a separa cp args cu o ; în loc de :.

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

Comentarii (0)

Proiect > Curat și apoi asigurați-vă că BuildPath > Biblioteci a corecta Bibliotecă.

Comentarii (0)

java -verbose:class HelloWorld` ar putea ajuta să înțelegeți care clase sunt încărcate.

De asemenea, așa cum am menționat înainte, amintiți-vă pentru a apela numele complet calificat (de exemplu, includ pachet).

Comentarii (0)

Problema nu este despre funcția principală. Check out pentru

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

de ieșire și a alerga it.

Comentarii (0)

Am fost folosind Java 1.8, și această eroare dintr-o dată a avut loc atunci când am apăsat "a Construi și curat" în NetBeans. Am schimbat-o pentru un scurt moment la 1.7 din nou, apasat OK, re-deschis proprietăți și a trecut înapoi la 1.8, si totul a mers perfect.

Sper sa pot ajuta pe cineva cu acest lucru, deoarece aceste erori pot fi destul de consumatoare de timp.

Comentarii (0)

Această problemă a avut loc pentru mine când am importat un proiect existent în eclipsă. Ce se întâmplă este copiat toate fișierele, nu în pachet, dar în afara pachetului. Prin urmare, atunci când am încercat run > run configurații, s-ar putea't găsi principala metodă pentru că nu a fost în pachet. Tot ce am făcut a fost să copiați fișierele în pachet și Eclipsa a fost apoi capabil să detecteze principala metodă. Deci, în cele din urmă, asigurați-vă că Eclipsa poate găsi metoda principal, asigurându-vă că fișierele java sunt în pachetul potrivit.

Comentarii (0)

Dacă este așa simplu decât cred mulți oameni, inclusiv pe mine :)

cd-ul `Director de Proiect/src/pachet acolo ar trebui sa vezi yourClass.java apoi rulați - javac yourClass.java care va crea yourClass.class apoi cd-ul din src folder și în construi folder puteți rula pachet java.youClass

Eu sunt, folosind Terminal pe Mac sau puteți realiza aceeași sarcină folosind Command Prompt în windows

Comentarii (0)

Dacă sunteți folosind Eclipse... am redenumit meu principal fișier de clasă și a primit acea eroare. M-am dus la "Rula la Fel de" configurator și în clasa calea pentru acest proiect, a avut enumerate ambele fișiere în calea de clase. Am scos vechea clasă care l-am redenumit și a lăsat clasa care a avut nume nou și este compilat și rulat foarte bine.

Comentarii (0)

Aceasta a rezolvat problema pentru mine azi:

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

Apoi clean&construi și rula fișiere individuale de care ai nevoie.

Comentarii (0)