Mai mult
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));
}
}
344
22
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;
.În cazul în care clasa este într-un pachet
Atunci de asteptare:
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:Și asta pentru thepackagename
director 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 care
thepackagename` există.Să fie clar, numele din această clasă nu este
TheClassName
, L'sthepackagename.TheClassName
. Încercarea de a executaTheClassName
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."
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 HelloWorld
numele programului
d:\sample`java -cp d:\sample HelloWorld
Cred că aveți nevoie să adăugați directorul curent la Java-classpath
Trebuie să includă classpath la javac și java comenzi
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:
Dacă locul de muncă în Eclipse, face doar o curățire (proiect\curat..
`curat toate proiectele
) a proiectului.Trebuie să setați classpath dacă primiți eroarea:
De exemplu:
Am primit această eroare pentru că am fost încercarea de a rula
când ar fi trebuit eliminat
.clasa
:Verifica
BuildPath
, ar putea fi faptul că sunteți referire la o bibliotecă care nu mai există.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âtsrc/main/java/
.Așa că am ajuns cu ceva de genul
mypackage.morepackage.myclass
și o structură de directoare privind casrc/mypackage/morepackage/myclass
, care are în mod inerent greșit cu nimic. Dar atunci când tu a alergamvn clean install
se va uita pentrusrc/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:Pentru că pur și simplu nu sunt incluse clasa ambalate în Borcan.
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.
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
Proiect > Curat și apoi asigurați-vă că BuildPath > Biblioteci a corecta Bibliotecă.
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).
Problema nu este despre funcția principală. Check out pentru
de ieșire și a alerga it.
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.
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.
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 dinsrc
folder și înconstrui
folder puteți rulapachet java.youClass
Eu sunt, folosind Terminal pe Mac sau puteți realiza aceeași sarcină folosind Command Prompt în windows
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.
Aceasta a rezolvat problema pentru mine azi:
Apoi clean&construi și rula fișiere individuale de care ai nevoie.