Solución: no se pudo encontrar o cargar la clase principal

El error ' No se pudo encontrar o cargar la clase principal ' ocurre cuando se usa un comando java en el símbolo del sistema para iniciar un programa Java especificando el nombre de la clase en la terminal. La razón por la que esto sucede se debe principalmente al error de programación del usuario al declarar la clase.

No se pudo encontrar o cargar la clase principal en la línea de comandos de Java

Como se mencionó anteriormente, este error en su mayoría no está relacionado con el sistema y el usuario comete un error en varios escenarios como se muestra a continuación. Antes de seguir adelante, asumimos que tiene un conocimiento básico del lenguaje de programación Java y cómo funciona.

¿Qué causa el error 'No se pudo encontrar o cargar la clase principal' en Java?

El mensaje 'No se pudo encontrar o cargar la clase principal' significa que el primer paso del motor Java que busca la clase para su ejecución ha fallado. El comando java no pudo ubicar la clase en el directorio correcto.

En algunos casos, debe agregar la ruta de archivo correcta y apuntar el terminal Java a la ubicación correcta. Dado que está ejecutando el comando desde la terminal de línea de comandos, la computadora no sabe dónde se encuentra la clase o dónde está ubicada. En los IDE específicos, este no es el problema, ya que el IDE mantiene un puntero apuntando hacia el directorio de trabajo actual.

¿Qué es la sintaxis 'java'?

Antes de comenzar a solucionar el problema de por qué el terminal nos devuelve un error al intentar ejecutarlo, primero debemos mirar la sintaxis del comando. Si no está utilizando la sintaxis correcta, inevitablemente enfrentará este error.

La sintaxis normal del comando es algo como esto:

 java [...] [...]

Aquí hay una opción de línea de comando, es un nombre de clase Java completamente calificado y es un argumento de línea de comando que se pasa a su aplicación cuando se compila todo el paquete.

Un ejemplo de un comando válido es:

java -Xmx100m com.acme.example.ListAppuals kevin flechas bart

El comando anterior hará que el comando java ejecute las siguientes operaciones:

  • Buscará una versión compilada de la clase ' com.acme.example.ListAppuals '.
  • Después de buscar, cargará la clase.
  • A continuación, cuando se carga la clase, se buscará en la clase un método 'principal' con una firma válida, modificadores y tipo de retorno. Una clase principal de muestra sería algo como:
public static void main (String [])
  • El método se llamará con los argumentos 'kevin', 'flechas' y 'bart' como cadena [].

Cómo solucionar 'No se pudo encontrar o cargar la clase principal'

Solución 1: Comprobación del argumento del nombre de la clase

El error más común que cometen los usuarios es que proporcionan un nombre de clase incorrecto como argumento (o un nombre de clase correcto es una forma incorrecta). Dado que estamos declarando parámetros en la línea de comando, es muy probable que pase el argumento del nombre de la clase en una forma incorrecta. Aquí enumeraremos todos los escenarios posibles en los que puede cometer un error.

  • Escribir un nombre de clase simple . Si declara la clase en un paquete como 'com.acme.example', debe usar el nombre de clase completo, incluido el paquete, en el comando de Java.
java com.acme.example.ListAppuals

en vez de

Java ListAppuals
  • Debería declarar un nombre de clase en lugar de declarar un nombre de archivo o ruta. Java no obtiene la clase si declara un nombre de ruta / nombre de archivo para ella. Las entradas incorrectas incluyen lo siguiente:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • Se debe tener en cuenta la carcasa . Los comandos de Java distinguen entre mayúsculas y minúsculas y si comete un error de una sola letra, no podrá cargar la clase principal. Un ejemplo de errores incorrectos son:
java com.acme.example.listappuals
  • No debe declarar un nombre de archivo fuente . Como se mencionó anteriormente, solo necesita declarar la clase en el formato de nombre de clase completo correcto. Ejemplo de error es:
Java ListAppuals.java
  • Este error también ocurrirá si comete un error de mecanografía o si olvida escribir el nombre de la clase por completo .

Si ha cometido algún error descuidado al declarar el nombre de la clase, asegúrese de solucionarlo y luego intente iniciar el programa.

Solución 2: comprobar classpath

Si ha declarado el nombre de clase correctamente pero aún se muestra el error, es probable que el comando java no pueda encontrar el nombre de clase especificado en la ruta. La ruta de clases es una ruta en la que el tiempo de ejecución de Java busca archivos de recursos y clases. Puede configurar fácilmente la ruta de clase utilizando dos comandos diferentes, como se muestra a continuación:

C:> sdkTool -classpath classpath1; classpath2 ... C:> establecer CLASSPATH = classpath1; classpath2 ...

Para obtener más información sobre la ruta de clases, debe consultar los siguientes documentos.

Documentación de comandos de Java

Configuración de classpath

Solución 3: directorio de comprobación

Cuando declaras un directorio como classpath, siempre corresponderá a la raíz del espacio de nombres. Por ejemplo, si "/ usr / local / acme / classes" está en la ruta de clases, Java buscará una clase "com.acme.example.Appuals". Buscará una clase con el siguiente nombre de ruta:

/usr/local/acme/classes/com/acme/example/Appuals.class

Entonces, en esencia, si pones la siguiente dirección en la ruta de clase, Java no podrá encontrar la clase:

/ usr / local / acme / classes / com / acme / example

También debe verificar su subdirectorio y ver si coincide con el FQN. Si su FQN de clases es "com.acme.example.Appuals", Java buscará una "Appuals.class" en el directorio "com / acme / example".

Para darte un ejemplo, supongamos el siguiente escenario:

  • La clase que desea ejecutar es: com.acme.example.Appuals
  • La ruta completa del archivo es: /usr/local/acme/classes/com/acme/example/Appuals.class
  • El directorio de trabajo actual es: / usr / local / acme / classes / com / acme / example /

Entonces se mantendrían los siguientes escenarios:

# incorrecto, se necesita FQN java Appuals # incorrecto, no hay carpeta `com / acme / example` en el directorio de trabajo actual java com.acme.example.Appuals # incorrecto, similar al escenario anterior java -classpath. com.acme.example.Appuals # OK; se establece una ruta de clase relativa java -classpath ../../ .. com.acme.example.Appuals # OK; se establece una ruta de clase absoluta java -classpath / usr / local / acme / classes com.acme.example.Appuals

Nota: La ruta de clases también debe incluir todas las demás clases (que no son del sistema) que sus aplicaciones necesitan.

Solución 4: Comprobación del paquete de clases

Si todas las soluciones anteriores son ciertas en su caso, debe asegurarse de que su código fuente esté ubicado en la carpeta correcta. Además, ha declarado correctamente el paquete . Si ejecuta su código con un IDE, probablemente le informará sobre el problema. Sin embargo, en nuestro caso, dado que lo estamos ejecutando en el símbolo del sistema, el error pasará desapercibido y obtendrá el error de clase en discusión.