Solucione el error No se pudo encontrar o cargar la clase principal en Java
-
Error
Could Not Find
debido a la introducción de un nombre incorrecto en Java - No se pudo encontrar el error debido a un nombre de paquete incorrecto en Java
-
Error
Could Not Find
debido a un CLASSPATH incorrecto 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
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase