java - startpos - no se ha encontrado o cargado la clase principal files
Error: No se pudo encontrar o cargar la clase principal (22)
Esta pregunta ya tiene una respuesta aquí:
Tengo problemas para compilar y ejecutar mi código Java, con la intención de permitirme interconectar Java con un objeto compartido para Vensim, un paquete de modelado de simulación.
El siguiente código compila sin error:
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
Sin embargo, cuando intento ejecutar lo siguiente:
java -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Recibo el siguiente error: "Error: No se pudo encontrar o cargar la clase principal SpatialModel". Mi código SpatialModel.java contiene un método ''principal'' (a continuación), así que no estoy seguro de cuál es el problema. ¿Alguien puede ayudarme? Gracias.
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));
}
}
Creo que necesitas agregar el directorio actual a la ruta de clase de Java
java -cp .:./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel vars
Debe asegurarse de agregar la ubicación de su archivo .class
a su classpath. Por lo tanto, si está en la carpeta actual, a continuación, agregue .
a su classpath. Tenga en cuenta que el separador de classpath de Windows es un punto y coma, es decir ;
El problema no es sobre su función principal. Echa un vistazo para
javac -d . -cp ./apache-log4j-1.2.16/log4j-1.2.16.jar:./vensim.jar SpatialModel.java VensimHelper.java VensimException.java VensimContextRepository.java
Salida y ejecutarlo.
Estaba usando Java 1.8, y este error ocurrió repentinamente cuando presioné "Construir y limpiar" en netbeans, cambié por un breve momento a 1.7 otra vez, hice clic en Aceptar, volví a abrir las propiedades y volví a la 1.8 y todo funcionó perfectamente.
Espero poder ayudar a alguien con esto, estos errores pueden llevar bastante tiempo.
Este problema se produjo cuando importé un proyecto existente en eclipse. Lo que sucede es que copió todos los archivos, no en el paquete, sino fuera del paquete. Por lo tanto, cuando intenté ejecutar> ejecutar configuraciones, no pudo encontrar el método principal porque no estaba en el paquete. Todo lo que hice fue copiar los archivos en el paquete y Eclipse pudo detectar el método principal. Finalmente, asegúrese de que Eclipse pueda encontrar su método principal, asegurándose de que sus archivos java estén en el paquete correcto.
Esto resolvió el problema para mí hoy:
cd /path/to/project
cd build
rm -r classes
Luego, limpie y genere y ejecute los archivos individuales que necesita.
Proyecto> Limpiar y luego asegurarse de que BuildPath> Bibliotecas tenga la biblioteca correcta.
Puede probar estos dos cuando recibe el error: ''no se pudo encontrar o cargar la clase principal''
Si su archivo de clase se guarda en el siguiente directorio con el nombre del programa HelloWorld
d:/sample
-
java -cp d:/sample HelloWorld
-
java -cp . HelloWorld
Recibí este error porque estaba tratando de correr
javac HelloWorld.java && java HelloWorld.class
cuando debería haber eliminado .class
:
javac HelloWorld.java && java HelloWorld
Sé que esta pregunta fue etiquetada con Linux, pero en Windows , es posible que necesite separar sus argumentos de CP con una ;
en lugar de un :
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
Si es tan simple como mucha gente piensa, me incluyo :)
cd a Project Folder/src/package
allí debería ver yourClass.java, luego ejecute javac yourClass.java
que creará suClass.class, luego cd fuera de la carpeta src
y en la carpeta de build
allí puede ejecutar java package.youClass
Estoy usando la Terminal en Mac o puede realizar la misma tarea usando el Símbolo del sistema en Windows
Si está recibiendo este error y está utilizando Maven para construir sus Jars , entonces hay una buena posibilidad de que simplemente no tenga sus clases de Java en src/main/java/
.
En mi caso, creé mi proyecto en Eclipse que por defecto es src
(en lugar de src/main/java/
.
Así que terminé con algo como mypackage.morepackage.myclass
y una estructura de directorios que parecía src/mypackage/morepackage/myclass
, que inherentemente no tiene nada de malo. Pero cuando ejecute mvn clean install
buscará src/main/java/mypackage/morepackage/myclass
. No encontrará la clase pero tampoco error. Por lo tanto, se construirá con éxito y, cuando ejecute el Jar generado, el resultado es:
Error: Could not find or load main class mypackage.morepackage.myclass
Porque simplemente nunca incluyó su clase en el Jar empaquetado.
Si está trabajando en Eclipse, simplemente realice la limpieza ( project/clean..
clean all projects
) del proyecto.
Si está utilizando Eclipse ... Cambié el nombre de mi archivo de clase principal y obtuve ese error. Fui al configurador "Ejecutar como" y, bajo la ruta de clase para ese proyecto, había enumerado ambos archivos en la ruta de clase. Eliminé la clase antigua a la que cambié de nombre y dejé la clase que tenía el nuevo nombre y compiló y funcionó bien.
Si intenta ejecutar una aplicación java que necesita JDK 1.6 y está intentando ejecutarse en JDK 1.4, se encontrará con este error. En general, intentar ejecutar la aplicación java en el antiguo JRE puede fallar. Intenta instalar nuevos JRE / JDK
Si la clase está en un paquete
package thepackagename;
public class TheClassName {
public static final void main(String[] cmd_lineParams) {
System.out.println("Hello World!");
}
}
Entonces llamando:
java -classpath . TheClassName
da como resultado Error: Could not find or load main class TheClassName
. Esto se debe a que debe llamarse con su nombre completo:
java -classpath . thepackagename.TheClassName
Y este directorio thepackagename
debe existir en el classpath. En este ejemplo .
, es decir, el directorio actual, es la totalidad de classpath. Por lo tanto, este ejemplo particular debe llamarse desde el directorio en el que existe el nombre de thepackagename
.
Para que quede claro, el nombre de esta clase no es TheClassName
, es thepackagename.TheClassName
. Intentar ejecutar TheClassName
no funciona, porque no existe ninguna clase con ese nombre . No en el classpath actual de todos modos.
Finalmente, tenga en cuenta que la versión compilada ( .class) se ejecuta, no la versión del código fuente ( .java). Por lo tanto, "CLASSPATH".
Tengo un problema similar en Windows, está relacionado con el classpath. Desde la línea de comandos, navegue hasta el directorio donde está ubicado su archivo Java (* .java y * .class), luego intente nuevamente con sus comandos.
Tienes que establecer el classpath si obtienes el error:
No se pudo encontrar o cargar la clase principal XYZ
Por ejemplo:
E:/>set path="c:/programfiles/Java/jdk1.7.0_17/bin"
E:/>set classpath=%classpath%;.;
E:/>javac XYZ.java
E:/>java XYZ
Tienes que incluir classpath a tus comandos javac y java
javac -cp . PackageName/*.java
java -cp . PackageName/ClassName_Having_main
Supongamos que tienes lo siguiente
Paquete denominado: com.test Nombre de la clase: el archivo Hello (que tiene main) se encuentra dentro de "src / com / test / Hello.java"
desde el directorio externo:
$ cd src
$ javac -cp . com/test/*.java
$ java -cp . com/test/Hello
- En Windows lo mismo estará funcionando también, ya lo intenté.
Yo uso Anypoint Studio (un IDE basado en Eclipse). En mi caso, todo funcionó bien, hasta que descubrí que mientras ejecutaba el código Java, se ejecutaba algo totalmente diferente. Luego he borrado los archivos .class. Después de este punto recibí el mensaje de error del título de esta pregunta. Limpiar el proyecto no solucionó el problema.
Después de reiniciar el IDE todo volvió a funcionar bien.
revise su BuildPath, podría ser que esté haciendo referencia a una biblioteca que ya no existe.
java -verbose:class HelloWorld
puede ayudarlo a comprender qué clases se están cargando.
Además, como se mencionó anteriormente, recuerde llamar al nombre completo calificado (es decir, incluir el paquete).