Solucione el error No se pudo encontrar o cargar la clase principal en Java

Mohammad Irfan 12 octubre 2023
  1. Error Could Not Find debido a la introducción de un nombre incorrecto en Java
  2. No se pudo encontrar el error debido a un nombre de paquete incorrecto en Java
  3. Error Could Not Find debido a un CLASSPATH incorrecto en Java
Solucione el error No se pudo encontrar o cargar la clase principal en Java

Este tutorial presenta los errores de clase principal que no se pudieron encontrar o cargar en Java.

Supongamos que hemos escrito un código y lo compilamos. Hasta ahora, todo funciona bien, pero cuando finalmente lo ejecutamos, apareció un error.

could not find or load main class

Este tutorial discutirá por qué ocurre este error y cómo resolverlo. Primero recapitulemos cómo ejecutamos un programa java usando el símbolo del sistema.

Primero, compilamos el código usando el comando javac como se muestra a continuación:

javac<.java file name>

Después de ejecutar el comando anterior, se crea un archivo con la extensión .class en la carpeta actual.

El archivo .class tendrá la misma clase que el programa .java. Luego ejecutamos el archivo .class usando el siguiente comando para ejecutar el código Java:

java<classname>

Es posible que obtengamos el error could not find or load main class. Este error es un error de tiempo de ejecución y ocurre cuando la máquina virtual de Java no puede ubicar la clase principal (clase que contiene el método main) que estamos tratando de ejecutar.

Este error ocurre con mayor frecuencia cuando se ejecutan nuestros programas Java mediante el símbolo del sistema. Antes de discutir las causas de este error, primero comprendamos CLASSPATH.

CLASSPATH en Java

Es el archivo executable.class y otros archivos de recursos.

La JVM lo usa para localizar los archivos. El CLASSPATH predeterminado es el directorio actual a menos que establezcamos explícitamente CLASSPATH en las variables del sistema.

Para ejecutar un programa, necesitamos pasar el nombre de la clase. Tomamos el siguiente ejemplo para ilustrar el punto:

public class DelftStack {
  public static void main(String args[]) {
    System.out.println("Hello from DelftStack");
  }
}

Primero vamos a compilarlo usando el comando javac:

C :\Users\User\Documents\DelftStack\java
    > javac DelftStack.java C :\Users\USer\Documents\DelftStack\java
    >

Después de la ejecución del comando anterior, se crea un archivo DelftStack.class en nuestro directorio actual. Ejecutemos ese archivo usando el comando java.

C :\Users\User\Documents\DelftStack\java
    > java DelftStack.class Error : Could not find or load main class DelftStack.
class Caused by : java.lang.ClassNotFoundException : DelftStack.class

Aquí, recibimos un error porque estamos tratando de ejecutar el archivo .class. En cambio, solo necesitamos pasar el nombre de la clase.

Mira abajo:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

Error Could Not Find debido a la introducción de un nombre incorrecto en Java

El could not find or load the main class también puede ocurrir cuando pasamos el nombre de clase incorrecto. Siguiendo con el ejemplo anterior, si intentamos ejecutar el programa con el nombre equivocado de la siguiente manera:

C :\Users\User\Documents\DelftStack\java > java DelftStac Error
    : Could not find or load main class DelftStac Caused by : java.lang.ClassNotFoundException
    : DelftStac

Recibimos el error anterior porque escribimos mal el nombre de la clase. Aquí, la JVM está intentando ejecutar una clase llamada DelftStac, que no existe.

Podemos resolver este problema deletreando correctamente el nombre de la clase de la siguiente manera:

C :\Users\User\Documents\DelftStack\java > java DelftStack Hello from DelftStack

También debemos tener en cuenta aquí que el nombre de la clase distingue entre mayúsculas y minúsculas. Si ejecutamos la clase Delftstack, obtendremos un error.

Mira abajo:

C :\Users\User\Documents\DelftStack\java > java Delftstack Error
    : Could not find or load main class Delftstack Caused by : java.lang.NoClassDefFoundError
    : Delftstack(wrong name
                 : Delftstack)

Debemos usar la ortografía correcta y los casos correctos para ejecutar un archivo con éxito.

No se pudo encontrar el error debido a un nombre de paquete incorrecto en Java

Movamos nuestra clase DelftStack al paquete com.DelftStack. Un paquete se utiliza para mantener juntas clases similares.

Mira el siguiente código:

package com.DelftStack;

public class DelftStack {
  public static void main(String args[]) {
    System.out.println("Hello from DelftStack");
  }
}

Para compilar un paquete en Java, usamos el siguiente comando:

javac - d.<.java file name>

El interruptor de bandera -d se usa para indicar dónde guardar el archivo de clase generado. El . significa el directorio actual.

Compilamos el código anterior de la siguiente manera:

C :\Users\User\Documents\DelftStack\java > javac - d.DelftStack.java

Después de ejecutar el comando anterior, se crea la siguiente estructura de carpetas en nuestro directorio actual.

com\DelftStack\DelftStack.class

Como podemos ver, nuestro archivo de clase tiene dos carpetas de profundidad desde nuestro directorio actual. Entonces, si intentamos ejecutar nuestro archivo de clase como lo estábamos haciendo en casos anteriores, obtendremos un error.

C :\Users\User\Documents\DelftStack\java > java DelftStack Error
    : Could not find or load main class DelftStack Caused by : java.lang.ClassNotFoundException
    : DelftStack

El motivo de este error es que no existe ninguna clase DelftStack en nuestra carpeta actual. Para ejecutar la clase presente en un paquete, debemos pasar su nombre completo (com.DelftStack.DelftStack en este caso).

C :\Users\User\Documents\DelftStack\java > java com.DelftStack.DelftStack Hello from DelftStack

Esto le dice a Java que busque la clase dentro de la carpeta com\DelftStack.

Error Could Not Find debido a un CLASSPATH incorrecto en Java

CLASSPATH le dice a la JVM dónde están presentes los archivos .class.

Supongamos que actualmente estamos en una carpeta diferente y queremos ejecutar un programa Java cuyo archivo de clase existe en una carpeta diferente. En este caso, podemos pasar la ubicación del archivo de clase usando la opción -classpath.

Por ejemplo:

java - classpath XYZ / ABC < class name
>

El comando anterior le dice a Java que busque el archivo .class dentro de la carpeta ZYX/ABC.

En el caso anterior, creamos un paquete.

Supongamos que queremos ejecutar el archivo dentro de la carpeta com/DelftStack. Usando el siguiente comando, podemos hacerlo:

> java - classpath../../ com.DelftStack.DelftStack Hello from DelftStack

El ../ significa el directorio principal. Entonces ../../ significa buscar dos niveles de directorio.

Tomemos otro ejemplo, supongamos que estamos en la ubicación del escritorio (carpeta) y queremos ejecutar un archivo de clase en otro lugar de la computadora. Podemos hacerlo a continuación.

> java - cp C :\Users\User\Documents\DelftStack\java com.DelftStack.DelftStack Hello from DelftStack

La bandera -cp es la abreviatura de -classpath. Aquí, pasamos la ubicación completa de la carpeta donde está presente el archivo .class.

Artículo relacionado - Java Error