tools startpos pos org openbravo groovystarter files error encontrado codehaus clase cargado cache borrar java linux

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

  1. java -cp d:/sample HelloWorld
  2. 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



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).