package docen_archivos; import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.applet.AudioClip; import java.net.URL; import java.net.URLConnection; import java.net.JarURLConnection; import java.io.IOException; import java.io.FileNotFoundException; import java.net.MalformedURLException; import java.lang.SecurityException; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.Vector; import java.util.Enumeration; /****************************************************************** * Clase que descarga un gráfico y un archivo midi del archivo JAR. * Reproduce el archivo de audio. * Pone una lista con información de archivos en mitad superior del applet. * Pinta imagen en mitad inferior del applet *****************************************************************/ public class applet_jar extends Applet { List lista = new List(); Image imagen; AudioClip audio = null;; /************** Inicializar el applet *********************/ public void init() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } /****************** Inicialización de componentes **********/ private void jbInit() throws Exception { this.setLayout( new GridLayout(2,1)); // Divido el applet en filasxcolumnos definir_lista(); // Pone entradas de JAR en lista cargar(); // Carga de audio e imagen (también escribe en lista) if (audio != null) // Si el audio no es nulo, se reproduce audio.play(); add(lista); repaint(); // Para asegurar que se ve bien la imagen desde el inicio } /*** Pinto la imagen centrada y en mitad inferior del applet ***/ public void paint(Graphics g) { Rectangle rec = g.getClipBounds(); int ancho_imagen = imagen.getWidth( this ); int alto_imagen = imagen.getHeight( this ); g.drawImage( imagen, rec.width/2 - ancho_imagen/2, rec.height/2, this ); } /***************** Al destruir el applet se para la música *********/ public void destroy() { if (audio != null) audio.stop(); } /************************************************************************ * Escribe en la lista: 1) URL ABSOLUTA del archivo JAR y 2) URLs RELATIVAS * de las entradas del JAR. ***********************************************************************/ void definir_lista() { try { /****** Consigo un JarFile a partir de la URL *****/ URL url = new URL("jar:" + this.getCodeBase().toString() + "jar/pack.jar!/"); JarURLConnection conexion = (JarURLConnection) url.openConnection(); JarFile jar = conexion.getJarFile(); /******* Añado a lista ***************/ lista.add( "------- URL ABSOLUTA DE ARCHIVO JAR: -------"); lista.add( url.toString()); // /***** Consigo las entradas del JarFile y las añado a la lista ********/ JarEntry entry; lista.add( "------- ENTRADAS RELATIVAS DEL ARCHIVO JAR: -------" ); for (Enumeration e = jar.entries(); e.hasMoreElements(); ) { entry = (JarEntry) e.nextElement(); lista.add(entry.getName()); // Añadir a la lista } } catch (NullPointerException e) { System.out.print("NullPointerException:"); System.out.println(e.getMessage() + "\r\n"); e.printStackTrace(); } catch (SecurityException e) { System.out.print("SecurityException:"); System.out.println(e.getMessage() + "\r\n"); e.printStackTrace(); } catch (MalformedURLException mue) { // Hija de IOException System.out.print("URL inadecuada:"); System.out.println(mue.getMessage() + "\r\n"); mue.printStackTrace(); } catch (IOException ioe) { // Hija de Exception System.out.print("IOException:"); System.out.println(ioe.getMessage() + "\r\n"); ioe.printStackTrace(); } catch (Exception e) { System.out.print("Exception:"); System.out.println(e.getMessage() + "\r\n"); e.printStackTrace(); } } /******************************************************************************* * Cargo imagen y audio. * Ademas se añaden las URLs absolutas del archivo de imagen y del de sonido. *******************************************************************************/ void cargar() { try { /*** Salidas a la consola ***/ System.out.println( "jar:" + getCodeBase().toString() + "jar/pack.jar!/canon_pachelbel.mid" + "\r\n"); System.out.println( "jar:" + getCodeBase().toString() + "jar/pack.jar!/buho.gif" + "\r\n"); /* Añade a lista un titulo */ lista.add("------- URLs ABSOLUTAS DE ENTTRADAS (de imagen y sonido): -------"); /********* Obtener audio del archivo JAR ****************/ URL url_audio = new URL( "jar:" + getCodeBase().toString() + "jar/pack.jar!/canon_pachelbel.mid" ); audio = getAppletContext().getAudioClip( url_audio ); // Consigo un AudioClip /********* Obtener imagen del archivo JAR ***************/ URL url_imagen = new URL( "jar:" + getCodeBase().toString() + "jar/pack.jar!/buho.gif" ); imagen = this.getImage( url_imagen ); // Consigo un Image /********* Añado URLs absolutas a lista *********/ lista.add(url_audio.toString()); // Añado a lista lista.add(url_imagen.toString()); // Añado a lista } catch (NullPointerException e) { System.out.print("NullPointerException:"); System.out.println(e.getMessage() + "\r\n"); e.printStackTrace(); } catch (SecurityException e) { System.out.print("SecurityException:"); System.out.println(e.getMessage() + "\r\n"); e.printStackTrace(); } catch (MalformedURLException mue) { // Hija de IOException System.out.print("URL inadecuada:"); System.out.println(mue.getMessage() + "\r\n"); mue.printStackTrace(); } catch (IOException ioe) { // Hija de Exception System.out.print("IOException:"); System.out.println(ioe.getMessage() + "\r\n"); ioe.printStackTrace(); } catch (Exception e) { System.out.print("Exception:"); System.out.println(e.getMessage() + "\r\n"); e.printStackTrace(); } } }