Error “A JNI error has occurred...” al ejecutar Java: ¿Qué significa y cómo solucionarlo?

Contenido del Post:

Hola, comunidad de HolaMundoHub. :waving_hand:

Hoy vamos a resolver uno de los errores más frustrantes que puedes encontrar al ejecutar una aplicación Java:

A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 52.0

¿Qué significa este error?

Este error ocurre cuando intentas ejecutar una aplicación Java compilada con una versión más nueva del JDK que la versión del Java Runtime (JRE) que tienes instalado.

En otras palabras:

Estás intentando correr un .jar moderno con un Java viejo.


Traducción rápida de los números de versión:

Versión del archivo .class Requiere JDK
52.0 Java 8
65.0 Java 21

En tu caso:

El archivo .class fue compilado con Java 21, pero estás intentando ejecutarlo con un Java 8 o inferior.


:white_check_mark: ¿Cómo solucionarlo?

Paso 1: Verifica tu versión de Java actual

java -version

Si ves algo como:

java version "1.8.0_202"

Estás usando Java 8 (class version 52).


Paso 2: Instala una versión de Java más reciente

Para correr archivos .class de versión 65, necesitas al menos Java 21.

En Ubuntu, por ejemplo:

sudo apt install openjdk-21-jdk

En Windows o Mac, puedes usar:


Paso 3: Verifica que estás usando el Java correcto

Si tienes varias versiones instaladas, asegúrate de usar la nueva:

sudo update-alternatives --config java

Y verifica nuevamente:

java -version

¿Y si no puedes actualizar Java?

También puedes recompilar el proyecto con una versión más antigua de Java (por ejemplo, Java 8), usando el flag:

javac -target 1.8 -source 1.8 MiArchivo.java

Pero esto solo funcionará si el código no depende de funciones nuevas introducidas en Java 9 o superior.


:white_check_mark: Conclusión

Este error no es complicado… solo es Java diciendo:

“Este .jar es muy moderno para mí. Actualízame o bájale la versión al código.”

¿Te ha pasado esto en producción o fue en tu entorno local? Cuéntanos tu caso.
— Equipo de SoporteHub