1. (CHAT) Vamos a crear un fichero JAR que contenga nuestra aplicación de chat. Para ello deberemos recuperar todas las clases de nuestra aplicación chat (no del applet). Se pide:
a) Crear un fichero JAR de nombre AplicacionChat.jar que contenga la aplicación chat completa (cliente y servidor).
b) Ejecutar desde el JAR tanto el cliente como el servidor. Se deberá probar incluyendo el JAR en el CLASSPATH, y sin incluirlo, especificando el CLASSPATH directamente en la línea de comando de java.
c) Crear otro JAR de la aplicación completa, esta vez autoejecutable. Haremos dos ejecutables: uno para el cliente (AplicacionChatCliente.jar) y otro para el servidor (AplicacionChatServidor.jar). Probar a ejecutar estas aplicaciones tanto desde línea de comandos como desde el explorador de windows pinchando sobre ellas.
2. (CHAT) Ahora crearemos un JAR a partir del applet del chat. Se pide:
a) Crear un JAR con todas las clases necesarias del applet de nombre AppletChat.jar.
b) Crear una página HTML (chat.html) que invoque al applet dentro de ese fichero JAR y probar su funcionamiento en un navegador y en el appletviewer.
c) Si queremos distribuir tanto nuestra aplicación como nuestro applet, ¿cuál será la mejor forma de hacerlo? Comenta algunas ventajas de hacerlo de esta manera.
3. (CHAT) Por último, añadiremos nuestra librería de utilidades para el chat como una extensión. Se pide:
a) Separar la clase principal del chat de las librerías auxiliares que hemos creado. Haremos un JAR con las librerías llamado LibreriaChat.jar.
b) Añadir el JAR al CLASSPATH y ejecutar la clase principal del chat comprobando que funciona correctamente.
c) Ahora vamos a vaciar el CLASSPATH (SET CLASSPATH=) y a añadir la librería como una extensión. ¿Qué tendremos que hacer con el JAR para que sea reconocido como extensión de java? ¿Tendremos que añadir alguna información al CLASSPATH para que localice nuestra librería? Cuando el CLASSPATH está vacío, ¿donde busca java las clases? Comprobar que la aplicación funciona correctamente accediendo a la librería como extensión de java.
d) Si tenemos un applet, ¿qué tipo de extensión será más conveniente utilizar? Crear una extensión de este tipo con la librería para nuestro applet del chat y probarlo.
4. ¿Qué extensión utilizarías en cada uno de los siguientes casos?:
a) Aplicación que se comunique directamente con otra máquina a través del puerto serie (RS232).
b) Programa de captura de imágenes desde una fuente de video (tarjeta capturadora).
c) Aplicación de suavizado de imágenes.
d) Sitio web que realice automáticamente un mailing cada semana a los usuarios registrados.
e) Visor de objetos 3D en VRML.
f) Aplicación de chat que cifre el login y password que envían los clientes.
1. Modificar la clase Ej1.java para construir una forma compleja, como por ejemplo un árbol, utilizando una caja o cilindro como tronco, y un cono para la copa (moviendo el cilindro y el cono para que encajen bien). Podéis fijaros en el ejemplo del universo simple para ver cómo colocar los componentes, y en el ejemplo de transformaciones para ver cómo posicionarlas. Si os sirve de guía, podéis seguir estos pasos (todos los cambios se hacen sobre el constructor):
Cylinder cilindro = new Cylinder(0.1f, 1.0f); cilindro.setAppearance(apariencia);
Cone cono = new Cone(0.3f, 0.5f); cono.setAppearance(apariencia);
Transform3D t3D = new Transform3D(); t3D.setTranslation (new Vector3f(0.0f, 0.5f, 0.0f)); TransformGroup tg = new TransformGroup(t3D);
tg.addChild(cono);
bg.addChild(cilindro); bg.addChild(tg); ... bg.compile();
2. Seguimos con el ejemplo del árbol (la misma clase Ej1.java). Intentad añadirle ramas. Para ello podéis añadirle cilindros, o cilindros y conos rotados y colocados en el lugar que queráis desde la rama principal.
3. En el fichero Ej3.java, leed esta imagen y esta otra y sumadlas en JAI (operador add), devolviendo el resultado. Como parámetros en el ParameterBlock sólo se necesitan las dos imágenes a sumar (añadidas con addSource(...))
4. En el fichero Ej4.java, aplicad un filtro de mediana (operador MedianFilter) a esta imagen . Como parámetro obligatorio en el ParameterBlock se necesita la imagen (añadida con addSource(...)). El resto de parámetros son optativos y no los vamos a especificar.
NOTA: para los ejercicios de JAI podéis ayudaros de los siguientes pasos:
FileSeekableStream stream = null; try { stream = new FileSeekableStream("fichero.jpg"); } catch (IOException e) { e.printStackTrace(); System.exit(0); }
RenderedOp img1 = JAI.create("stream", stream);
ParameterBlock params = new ParameterBlock(); params.addSource(img1);
RenderedOp imgres = JAI.create("nombre_operacion", params);
ScrollingImagePanel panel = new ScrollingImagePanel(imgres, imgres.getWidth(), imgres.getHeight()); Frame window = new Frame("JAI Sample Program"); window.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); window.add(panel); window.pack(); window.show();
Para entregar: Debéis entregar un ZIP e6_2.zip con: