Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de excepciones "ClassNotFoundException"

Estas en el tema de Manejo de excepciones "ClassNotFoundException" en el foro de Java en Foros del Web. Hola amigos Quería saber si esto es posible, pues no he encontrado mucho por la web (a simple vista al menos) y no me parece ...
  #1 (permalink)  
Antiguo 11/11/2008, 17:03
 
Fecha de Ingreso: enero-2005
Ubicación: Málaga
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 1
Pregunta Manejo de excepciones "ClassNotFoundException"

Hola amigos

Quería saber si esto es posible, pues no he encontrado mucho por la web (a simple vista al menos) y no me parece algo tan rebuscado.

Tengo un Applet, y a la hora de cargarse quería manejar una ClassNotFoundException, ya que el Applet usa la librería no estándar RXTX, por lo tanto mucha gente no la tiene "instalada". Añadir dicha librería en el parámetro "archive" del Applet, no es la solución, pues necesita meter archivos en %JAVA_HOME%/bin, y además depende del SO.

Así pues, lo que quiero basicamente, es que cuando sale una excepción de las mencionadas, el contenido del Applet sea un texto donde se indique la ausencia de la librería y las instrucciones a seguir para instalarla.

¿Algún comentario o idea?

Gracias de antemano.
  #2 (permalink)  
Antiguo 12/11/2008, 01:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Manejo de excepciones "ClassNotFoundException"

En la clase principal de tu applet, antes de usar nada que haga un import de cualquier clase de RXTX, puedes intentar una llamada de forma controlada a la libreria, dentro de un bloque try/catch que capture todas las excepciones, incluyendo las runtime, ya que no solo te puede dar una ClassNotFound, si no que ademas puede darte un "Unsatisfied Link Error" por ejemplo si la DLL no esta cargada. Si te salta una excepcion, ya sabes que algo pasa y en tu applet muestras una ventanita de error o algo similar, como redireccionarlo a una pagina HTML con las instrucciones de instalacion.

Una opcion tambien es usar Java Web Start, que permite hasta cierto punto desplegar automaticamente librerias del S.O. junto con tu "applet/aplicacion", claro que de todas formas tendras que firmar el applet/aplicacion.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 12/11/2008, 05:12
 
Fecha de Ingreso: enero-2005
Ubicación: Málaga
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 1
Respuesta: Manejo de excepciones "ClassNotFoundException"

Hola GreenEyed, creo que tu respuesta me ha ayudado a saber por donde van los tiros.
Pero si no es molestia dime una cosa: Si en la cabecera de la clase ya hay una llamada a otra clase que sí hace un import (del tipo
Código:
public class Applet3 extends JApplet implements LocationListener, ActionListener
). Al final se cargarán unas clases que sí producirán la excepción.

¿Tengo que intentar seguir el rastro de las clases que se cargan para averiguar dónde he de poner dicho bloque try-catch? ¿O hay otra forma de ejecutar código antes de que se cargue la clase "Location", que a la larga producirá la excepción?

Lo del Java Web Start parece una solución bastante elegante, voy a echarle un vistazo a ver como se adapta a mis necesidades, porque el applet tiene que estar firmado de cualquier manera.

Gracias

Manuel
  #4 (permalink)  
Antiguo 13/11/2008, 01:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Manejo de excepciones "ClassNotFoundException"

Hola,

Lo importante sería conseguir que la clase principal que tienes no dependiera "estaticamente" de las clases de RXTX. Eso lo puedes hacer, por ejemplo, haciendo una interfaz que declare los metodos que tu vas a llamar cuando uses las clases RXTX y luego haciendo una clase que implemente esa interfaz, y luego ese objeto es el que puedes cargar con Class.forName.

Por ejemplo, vamos a suponer que a través de las librerias necesitas llamar a los metodos abrirPuerto, enviarDatos, recibirDatos y cerrarPuerto. Declaras una interfaz con esos cuatro metodos y desde tu Applet solo puedes trabajar con esa interfaz, nada más.

Luego haces una clase que implemente esa interfaz usando las clases RXTX y su libreria nativa.

En el applet, haces un metodo que carga la clase implementadora usando solo el nombre de la clase como cadena, éste es el metodo que tendrá el try/catch para detectar que RXTX no está bien instalado, y crea una instancia, referenciada unicamente por la interfaz, que es con la que trabajara el applet.

Así es la única forma de que puedas cargar tu applet sin tener instaladas las clases RXTX para poder detectar el error. Por que si declaras directamente alguna referencia a RXTX desde alguna clase que use el Applet, entonces la JVM saltará antes de llegar a ejecutarlo.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Última edición por GreenEyed; 14/11/2008 a las 02:35 Razón: Joer, me faltaba un NO bastante importante :-)
  #5 (permalink)  
Antiguo 13/11/2008, 18:14
 
Fecha de Ingreso: enero-2005
Ubicación: Málaga
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 1
Respuesta: Manejo de excepciones "ClassNotFoundException"

Gracias por tu ayuda, me ha servido para orientarme sobre algo que ignoraba completamente.

Ahora intentaré ponerlo todo a funcionar.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.