SoloCodigo

Programación General => Java => Mensaje iniciado por: paulados en Jueves 12 de Marzo de 2009, 01:43

Título: Detectar version de java desde código java
Publicado por: paulados en Jueves 12 de Marzo de 2009, 01:43
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!!!!
Título: Re: Detectar version de java desde código java
Publicado por: shakka en Jueves 12 de Marzo de 2009, 03:25
Con System.getProperties("java.version")

http://java.sun.com/j2se/1.5.0/docs/api ... roperties( (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties(" onclick="window.open(this.href);return false;))
Título: Re: Detectar version de java desde código java
Publicado por: paulados en Jueves 12 de Marzo de 2009, 10:21
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!!!!
Título: Re: Detectar version de java desde código java
Publicado por: shadow_rev en Jueves 12 de Marzo de 2009, 23:28
Intenta haciendo algo como esto:

Código: Java
  1. public static void main(String[] args) {
  2.     try {
  3.         // ...
  4.     }
  5.     catch(UnsupportedClassVersionError error_version) {
  6.         System.err.println("NECESITAS JAVA 1.6 PARA EJECUTAR ESTA APLICACIÓN!!!n" + error_version.getMessage());
  7.     }
  8. }
  9.  

La verdad no lo he intentado :nosweat: , pero en teoría debería funcionar.

:suerte:
Título: Re: Detectar version de java desde código java
Publicado por: paulados en Viernes 13 de Marzo de 2009, 01:10
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!!!
Título: Re: Detectar version de java desde código java
Publicado por: arielb en Viernes 13 de Marzo de 2009, 22:20
Bueno lo que se me ocurre es que tú clase principal donde está el main la compiles con la versión más baja de java y el binario lo implementes en conjunto con los demás que son compilados con la versión más reciente de java, es decir que la ejecución sea ascendente y no descendente, ya que este error es porque el binario que se está ejecutando fue compilado en una versión reciente y se está tratando de ejecutar en una versión más baja de forma descendente.

Creo haberme explicado, ahí nos cuentas por favor como te fue.
Título: Re: Detectar version de java desde código java
Publicado por: paulados en Viernes 13 de Marzo de 2009, 22:48
Hola,

Eso lo pense ayer, pero no lo veía claro. Porque si tengo mis clases compiladas con 1.6, y la principal la intento compilar con 1.4, y que llame a la 1.6, no dará un error por intentar compilar clases de la 1.6 junto con la 1.4? no se si me explico.

De todas formas, intentare hacerlo a ver que sale.

Ciaoo!!!
Título: Re: Detectar version de java desde código java
Publicado por: arielb en Lunes 16 de Marzo de 2009, 16:39
Bueno a eso me refería con lo de ascendente y descendente, no lo he verificado, pero en teoría puedes interactuar con versiones de abajo(1.4) hacia arriba(1.6) pero no así lo contrario.
Pero si puedes hazlo y nos cuentas como te fue, y así salimos de la duda todos.