• Jueves 28 de Marzo de 2024, 20:27

Autor Tema:  Detectar version de java desde código java  (Leído 4520 veces)

paulados

  • Miembro activo
  • **
  • Mensajes: 52
    • Ver Perfil
Detectar version de java desde código java
« en: Jueves 12 de Marzo de 2009, 01:43 »
0
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

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Detectar version de java desde código java
« Respuesta #1 en: Jueves 12 de Marzo de 2009, 03:25 »
0
Con System.getProperties("java.version")

http://java.sun.com/j2se/1.5.0/docs/api ... roperties()

paulados

  • Miembro activo
  • **
  • Mensajes: 52
    • Ver Perfil
Re: Detectar version de java desde código java
« Respuesta #2 en: Jueves 12 de Marzo de 2009, 10:21 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 397
  • Nacionalidad: co
  • Un SPARTAN no muere en combate
    • Ver Perfil
    • http://shadowrev.blogspot.com
Re: Detectar version de java desde código java
« Respuesta #3 en: Jueves 12 de Marzo de 2009, 23:28 »
0
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:
Volará quien le ponga alas a sus sueños (Candidate for goddess)
Si el mal existe en este mundo, reside en el corazón de la humanidad (Edward D. Morrison - Tales of Phantasia)
Lo único que puedes cambiar del pasado, es lo que sientes por él en el presente (Lockon Stratos - Mobile Suit Gundam 00)
Ingeniero de Sistemas

paulados

  • Miembro activo
  • **
  • Mensajes: 52
    • Ver Perfil
Re: Detectar version de java desde código java
« Respuesta #4 en: Viernes 13 de Marzo de 2009, 01:10 »
0
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!!!

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Detectar version de java desde código java
« Respuesta #5 en: Viernes 13 de Marzo de 2009, 22:20 »
0
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.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

paulados

  • Miembro activo
  • **
  • Mensajes: 52
    • Ver Perfil
Re: Detectar version de java desde código java
« Respuesta #6 en: Viernes 13 de Marzo de 2009, 22:48 »
0
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!!!

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Detectar version de java desde código java
« Respuesta #7 en: Lunes 16 de Marzo de 2009, 16:39 »
0
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.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com