Programación General > Java
Detectar version de java desde código java
paulados:
Hola a todos,
Comento el error que me surgio, y la duda de ese error. Estaba compilando un jar con la version de java 1.6. Al irme a casa, lo ejecuto muy feliz, y me da un error (pense que habría puesto mal el classpath o algo, tambien es cierto que lei el mensaje de error por encima). El caso es que intentaba ejecutar el jar compilado con 1.6 con la maquina 1.5, y se quejaba de eso, pero con un mensaje "parecido" al tipico de cuando no esta bien la ruta.
Lo que quiero hacer, es dentro del código java, si intento ejecuarlo con una máquina de version anterior, que saque un mensaje en "cristiano" que diga: Este programa requiere java 1.6, y no esta instalado, y no de un horrible mensaje de error como el que da. Existe alguna forma de detectar eso en codigo java? Desde ya yo mismo imagino que no, pero bueno, por si existiese, agradeceria si alguien lo sabe :-D
Ciaoo y gracias por adelantadoo!!!!
shakka:
Con System.getProperties("java.version")
http://java.sun.com/j2se/1.5.0/docs/api ... roperties()
paulados:
Hola,
Perdon por no dar muchos datos concretos en el correo anterior. Era tarde y no podía pensar mucho :-P
Primero, muchas gracias por responder tan rápido. Con lo que me has dicho se puede comprobar la versión de java. He probado creando este simple código:
public class testVersion
{
public static void main(String args[])
{
try
{
System.out.println("Version: " + System.getProperty("java.version"));
}
catch(Exception e)
{
System.out.println("Error version?");
}
}
}
Lo compilo con la maquina 1.6 y lo ejecuto con la 1.4, y obtengo esto:
Exception in thread "main" java.lang.UnsupportedClassVersionError: testVersion (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
Es normal que obtenga el error, lo estoy ejecutando con una máquina inferior a la que lo compiló Lo que me gustaría sería capturar la excepción que salta, evitar que salga ese horrible mensaje, y sacar yo un bonito mensaje de: NECESITAS JAVA 1.6 PARA EJECUTAR ESTA APLICACIÓN!!!
Se puede hacer eso con java o requiero una aplicacion externa que no sea de java para hacerlo?
Muchas gracias!!!!
shadow_rev:
Intenta haciendo algo como esto:
--- Código: Java ---public static void main(String[] args) { try { // ... } catch(UnsupportedClassVersionError error_version) { System.err.println("NECESITAS JAVA 1.6 PARA EJECUTAR ESTA APLICACIÓN!!!n" + error_version.getMessage()); }}
La verdad no lo he intentado :nosweat: , pero en teoría debería funcionar.
:suerte:
paulados:
mmmmmmm, lamento decir.. que no funciona esa opcion tampoco. Da el mismo error. Aquí el código:
import javax.swing.JFrame;
public class javaVersionTester
{
public static void main(String args[])
{
try
{
System.out.println("Version 1.6 perfecto!");
}
catch (UnsupportedClassVersionError error_version)
{
System.err.println("NECESITAS JAVA 1.6 PARA EJECUTAR ESTA APLICACIÓN!!!n" + error_version.getMessage());
}
}
}
Aqui el error. Ha cambiado, porque he ejecutado en otro ordenador con java 1.5, no 1.4 como en el mail de antes, pero sigue dando la excepcion y no entrando en el catch, que es lo que intento :-S
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Gracias de todas formas, y si se ocurre alguna otra opcion, soy todo oidos!!!!!
Ciaoo!!!
Navegación
[#] Página Siguiente
Ir a la versión completa