¿Qué es el software

Anuncio
Unidad V: Java en el lado cliente
________________________________________________________________________________________
TEMA 1
APPLETS
1. INTRODUCCION
Los applets de Java son miniprogramas que pueden ejecutarse desde un
navegador World Wide Web usando marcas especiales, cuando el browser carga
una página que contiene un applet, el browser descarga el applet desde el
servidor Web y lo ejecuta en el sistema local.
El mensaje que aparece en la parte inferior del browser cuando carga una página
que contiene un Applet, es similar al siguiente: "initializing... starting...", esto indica
que el applet, se esta cargando. Entonces, ¿qué está pasando?
o Una instancia de la clase applet es creada.
o El applet se inicializa a si mismo.
o El applet empieza a ejecutarse.
Cuando el usuario se encuentra en una página web, que contiene un applet y salta
a otra página entonces el applet se detiene (stopping) a si mismo, y si el usuario
retorna a la pagina el applet, vuelve a ejecutarse (start) nuevamente. Cuando el
usuario sale del browser el applet, tiene un tiempo para detenerse y hacer una
limpieza final antes de salir del browser.
2. ESTRUCTURA DE UN APPLET
public class Miapplet extends Applet {
........
........
public void init() {
.......}
public void start() {
.......}
public void stop() {
.......}
public void destroy() {
.......}
.........
}
init() permite inicializar el applet cada vez que este es cargado o recargado.
start() inicia la ejecución del applet una vez cargado o cuando el usuario regresa a
la pagina.
stop() detiene la ejecución del applet como cuando se sale del browser.
destroy() antes de salir del browser hace la limpieza final.
________________________________________________________________________________________
Proyecto de Software
127
Unidad V: Java en el lado cliente
________________________________________________________________________________________
Veamos algunos ejemplos:
class Applet1 extends Applet {
............
public void paint(Graphics g) {
........}
...........
}
El método paint() es el método básico para imprimir información, y el método
update() puede ser usado con paint() para un mejor rendimiento en el pintado.
Aquí el famoso programa HelloWorld, escrito como un applet de Java.
import Java.awt.Graphics;
import Java.applet.Applet;
public class HelloWorld extends Applet{
public void paint(Graphics g){
g.drawString("Helloworld",50,25);
}
}
Explicando:
En primer lugar recuerde que debe guardar el programa como: HelloWorld.Java,
luego utilizar el compilador (Javac) para compilar HelloWorld.Java. Si todo es
correcto le devolverá HelloWorld.class
DrawString: es un método de la clase Graphics del paquete Java.awt
drawString(String str, int x, int y): permite dibujar una cadena de caracteres usando
los siguientes parametros:
str: la cadena a ser dibujada
x: la coordenada x
y: la coordenada y
3. COMO INCLUIR UN APPLET EN UNA PAGINA HTML
<APPLET>
Usamos este tag especial el cual es una extensión HTML, de la siguiente forma:
<HTML>
<HEAD>
<TITLE>A ver como nos va..</TITLE>
________________________________________________________________________________________
Proyecto de Software
128
Unidad V: Java en el lado cliente
________________________________________________________________________________________
</HEAD>
<BODY>
<BR>
<APPLET CODE="HelloWorld.class" WIDTH=200 HEIGHT=50>
</APPLET>
</BODY>
</HTML>
Explicando:
Code
El atributo code indica el nombre de la clase, es decir el archivo que contiene el
applet, incluyendo la extensión (class) en este caso el archivo class debe estar en
el mismo directorio que el archivo HTML.
Si desea almacenar sus clases en un directorio diferente al directorio donde se
almacenan sus archivos HTML, entonces deberá usar CODEBASE, CODE
contiene solamente el nombre de la clase (applet) mientras que CODEBASE
contiene la ruta donde se encuentran sus clases.WIDTH y HEIGHT establecen el
tamaño para el applet. Un segundo ejemplo:
import Java.awt.Graphics;
import Java.applet.Applet;
public class Applet2 extends Applet{
String texto;
public void init(){
texto=getParameter(“text”);
}
public void paint(Graphics g){
g.drawString(texto,50,25);
}
}
Como es de esperar este archivo deberá guardarse como Applet2.Java luego de
ser compilado les devolverá el applet, Applet2.class
Explicando:
getParameter es un método de la clase Applet del paquete Java.applet la sintaxis:
getParameter(String str): retorna el valor del parametro str en el tag HTML.
por ejemplo:
<applet code=”Constru.class” width=50 height=50>
<param name=speed value=5>
________________________________________________________________________________________
Proyecto de Software
129
Unidad V: Java en el lado cliente
________________________________________________________________________________________
</applet>
Al llamar a getParameter(“speed”) retorna el valor 5
Código HTML:
<HTML>
<HEAD>
<TITLE>A ver como nos va..</TITLE>
</HEAD>
<BODY>
<BR>
<HTML>
<HEAD>
<TITLE>y Ahora que sigue...</TITLE>
</HEAD>
<BODY>
<BR>
<applet code=Applet2.class WIDTH=100 Height=40>
<PARAM NAME=”text” VALUE=”Estan viendo mi 2do. Applet!!”>
</applet>
</BODY>
</HTML>
4. PRIORIDAD EN LA EJECUCIÓN DE TAREAS
Anteriormente
se
dijo
que
los
procesos
se
ejecutan
concurrentemente.Conceptualmente esto es verdadero, pero en la práctica no
ocurre así. Muchas computadoras tienen un simple CPU (nos estamos refiriendo
específicamente al microprocesador) por lo tanto este solo puede ejecutar una
instrucción a la vez y esta instrucción a su vez corresponde a un programa
cargado en la memoria.
Pueden haber muchos programas cargados en la memoria. Quien decide que
programa debe ejecutarse es el planificador de procesos que asigna un tiempo de
CPU a cada una de los procesos en espera de acuerdo a su una prioridad.
Cuando se vence el tiempo de ejecución de un proceso y esta no se ha
completado se guarda la posición en donde se quedo la ejecución de programa
para ser usada luego cuando se tenga que retomar la ejecución de este proceso.
Seguidamente la CPU ejecuta el siguiente proceso en espera. Todo este esquema
de ejecución le da la ilusión al usuario de la computadora que esta está
ejecutando varios procesos concurrentemente.
________________________________________________________________________________________
Proyecto de Software
130
Unidad V: Java en el lado cliente
________________________________________________________________________________________
El ejecutor de programas de Java soporta este modelo de manera muy simple,
con un planificador determinístico. Que utiliza un algoritmo conocido como
planificador de prioridad fija. Este algoritmo planificador de procesos se basa en la
prioridad del proceso pero tomando en cuenta también los otros procesos de tipo
Runnable.
Cuando un proceso en Java es creado, esta hereda la prioridad del proceso que lo
creo (hereda la prioridad de su padre). Se puede modificar la prioridad de los
procesos en cualquier momento luego de su creación usando el método
setpriority().
La prioridad del proceso se expresa en números que están en van desde
MIN_PRIORITY hasta MAX_PRIORITY (constantes definidas en la clase Thread).
El proceso que tiene el número mas alto es la que se ejecuta primero.
Cuando varios procesos están listos para se ejecutadas el planificador de Java
elige aquella que es del tipo Runnable.
Este código fuente de Java implementa un applet que anima una carrera entre dos
procesos runner con diferentes prioridades. Cuando se clickea el Mouse sobre el
applet comienza la carrera. El primer proceso tiene una prioridad de 2 y el
segundo proceso 3.
Este es el método run() para ambos runners:
public int tick = 1;
public void run() {
while (tick < 400000) {
tick++;
}
}
Este metodo run() simplemente cuenta desde 1 a 400,000. La variable de
instancia tick es pública porque el applet usa este valor para determinar que tanto
ha progresado el runner. Adicionalmente a los dos procesos runner este applet
tiene un tercer proceso que se encarga de dibujar. El metodo run() del proceso
que dibuja contiene un loop infinito; durante cada interacción del loop, este dibuja
una línea por cada runner. La tarea que dibuja tiene una prioridad de 4.
________________________________________________________________________________________
Proyecto de Software
131
Unidad V: Java en el lado cliente
________________________________________________________________________________________
Ejemplo de un applets.
/* button actions */
import java.awt.*;
public class ButtonActionsTest extends java.applet.Applet {
public void init() {
setBackground(Color.white);
add(new Button("Red"));
add(new Button ("Blue"));
add(new Button ("Green"));
add(new Button ("White"));
add(new Button ("Black"));
}
public boolean action(Event evt, Object arg) {
if (evt.target instanceof Button)
changeColor((String)arg);
return true;
}
void changeColor(String bname) {
if (bname.equals("Red")) setBackground(Color.red);
else if (bname.equals("Blue")) setBackground(Color.blue);
else if (bname.equals("Green")) setBackground(Color.green);
else if (bname.equals("White")) setBackground(Color.white);
else setBackground(Color.black);
}
}
________________________________________________________________________________________
Proyecto de Software
132
Unidad V: Java en el lado cliente
________________________________________________________________________________________
TEMA 2
EXCEPCIONES
1. QUE ES UNA EXCEPCIÓN?
El término excepción es conocido de manera corta como un “evento excepcional”
y puede ser definido de la siguiente manera: Una excepción es un evento que
ocurre durante la ejecución de un programa que desbarata o desorganiza el
normal funcionamiento del flujo de las instrucciones de un programa. Visto desde
el lenguaje Java una excepción es cualquier objeto que es una instancia de la
clase Throwable (o cualquiera de sus subclases).
Las excepciones causan muchos tipos de errores, desde problemas serios de
hardware, como caídas de disco duro a simples errores de programa, tales como
acceso a elementos de un array que no han sido declarados lo que produce una
invasión de memoria que puede estar ocupada por otros programas. Cuando tales
errores ocurren el método crea un objeto de tipo excepción y este actúa como una
mano milagrosa que salva al programa de la caída, luego de tratarse el error la
ejecución del programa continúa desde la siguiente línea de código que produjo el
error.
1.1 El bloque TRY
El primer paso en la construcción de un manejador de excepción es encerrar las
declaraciones que tengan la posibilidad de generar un error de excepción durante
la ejecución del programa. En general un bloque try es de la siguiente manera:
try {
// Declaraciones Java
}
El segmento de código llamado ‘Declaraciones Java’ esta compuesto de una o
mas declaraciones legales que podrían generar una excepción.
El siguiente programa usa una declaración try para el método entero por que el
código es fácil de leer.
PrintStream pstr;
try {
int i;
System.out.println("Entrando a la declaracion try");
pStr = new PrintStream(
new BufferedOutputStream(
________________________________________________________________________________________
Proyecto de Software
133
Unidad V: Java en el lado cliente
________________________________________________________________________________________
new FileOutputStream("ArchivoSalida.txt")));
for (i = 0; i < size; i++)
pStr.println("Valor en : " + i + " = " + victor.elementAt(i));
}
La declaración try gobierna las sentencias encerradas con este y define el campo
de acción de esta. Una declaración try debe ser acompañada por al menos un
bloque catch o un bloque finally.
1.2 El bloque CATCH
Como se explicó anteriormente, la sentencia try define el alcance del manejador
de excepción. Se asocia el manejador con una declaración try poniendo uno o
mas bloques catch directamente después que el bloque try:
try {
...
} catch ( . . . ) {
...
} catch ( . . . ) {
...
}...
Cabe resaltar que no puede haber código entre el final de la declaración try y el
comienzo de la declaración catch. La forma general de la declaración catch de
Java es:
catch (AlgunObjectoThrow Nombrevariable) {
// Declaraciones Java
}
Como se puede observar la declaración catch requiere un argumento simple. El
argumento para la declaración catch es un argumento como si lo fuera para la
declaración de un método. El tipo de argumento AlgunObjetoThrow declara el tipo
de excepción que el manejador puede manejar y debe ser el mismo de la clase
que hereda de la clase definida en el paquete java.lang; NombreVariable es el
nombre por el cual el manejador puede referirse a la excepción que esta
comprometida por el manejador.
El bloque catch contiene una serie de declaraciones Java. Esas declaraciones son
ejecutadas cuando el manejador de excepción es invocado.
Aqui un ejemplo:
El método writeList() de la clase ListOfNumbers usa dos manejadores de
excepción para la declaración try, con un manejador para cada tipo de excepción
que están en el ámbito del try.
________________________________________________________________________________________
Proyecto de Software
134
Unidad V: Java en el lado cliente
________________________________________________________________________________________
try {
int a[10];
int c;
c = a[11];
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Tratamiento de ArrayIndexOutOfBoundsException:
e.getMessage());
} catch (IOException e) {
System.err.println("Tratamiento de IOException: " + e.getMessage());
}
"
+
1.3 El bloque FINALLY
El paso final en el establecimiento de un manejador de excepción es proveer un
mecanismo para borrar el estado del método después (posiblemente) permitiendo
que el control sea pasado a una parte diferente del programa. Hacemos esto
encerrando el código a limpiar con un bloque finally.
try {
....
} finally {
if (pStr != null) {
System.out.println("Cerrando PrintStream");
pStr.close();
} else {
System.out.println("PrintStream no abierto");
}
}
Aquí algunos ejemplos:
SomeFileClass f = new SomeFileClass();
if (f.open("/a/file/name/path")) {
try {
someReallyExceptionalMethod();
} finally {
f.close();
}
}
El uso del finally en el código anterior se comporta como el siguiente:
________________________________________________________________________________________
Proyecto de Software
135
Unidad V: Java en el lado cliente
________________________________________________________________________________________
SomeFileClass f = new SomeFileClass();
if (f.open("/a/file/name/path")) {
try {
someReallyExceptionalMethod();
} catch (Throwable t) {
f.close();
throw t;
}
}
Aqui una compleja demostracion con finally :
public class MiClaseExcepcional extends ClaseContexto {
public static void main(String argv[]) {
int EstadoMisterioso = getContext();
while (true) {
System.out.print("Quien ");
try {
System.out.print("es ");
if (EstadoMisterioso == 1)
return;
System.out.print("ese ");
if (EstadoMisterioso == 2)
break;
System.out.print("extrano ");
if (EstadoMisterioso == 3)
continue;
System.out.print("pero amable ");
if (EstadoMisterioso == 4)
throw new UncaughtException();
System.out.print("en absoluto ");
} finally {
System.out.print("y divertido?\n");
} //finally
System.out.print("Yo quiero reunirme con ese sujeto");
}//while
System.out.print("Por favor llamame!\n");
}//main
}//class
________________________________________________________________________________________
Proyecto de Software
136
Unidad V: Java en el lado cliente
________________________________________________________________________________________
2. CONTROL DE EVENTOS
Se llaman eventos a aquellas acciones que realizan los usuarios cuando
presionan una tecla, arrastran el ratón o presionan el botón izquierdo del ratón,
etc.
Los eventos en Java se encuentran especificados en el paquete AWT (Abstract
Windowing Toolkit),
2.1 Los Objetos Eventos
Son el resultado de un evento, estos incluyen la siguiente información:
o
o
o
o
o
o
o
El tipo de evento Por ejemplo, keypress, mouse click, etc.
El objeto que ha generado el evento
El Momento en el que ocurrió el evento.
La coordenada (x,y) donde ocurrió el evento
La tecla que se ha presionado (para eventos keypress)
Un argumento, asociado con el evento
El estado del modificador de tecla Shift y Control cuando el evento ocurre.
2.2 Implementar un manejador de eventos
La clase Component, define muchos manejadores cada método manejador de
eventos puede ser usado solo para un tipo particular de evento excepto
handleEvent().
La clase Component define los siguientes métodos para manejar eventos:
action() (Event.ACTION_EVENT)
mouseEnter() (Event.MOUSE_ENTER)
mouseExit() (Event.MOUSE_EXIT)
mouseMove() (Event.MOUSE_MOVE)
mouseDown() (Event.MOUSE_DOWN)
mouseDrag() (Event.MOUSE_DRAG)
mouseUp() (Event.MOUSE_UP)
keyDown() (Event.KEY_PRESS o Event.KEY_ACTION)
keyUp() (Event.KEY_RELEASE o
Event.KEY_ACTION_RELEASE)
gotFocus() (Event.GOT_FOCUS)
lostFocus() (Event.LOST_FOCUS)
handleEvent() (todos los tipos de eventos)
Cuando un evento ocurre, el método manejador de evento que coincida con el
evento que ha ocurrido es llamado, siendo un poco mas explícito, cuando ocurre
un evento el evento pasa primero al método handleEvent(), el cual se encarga de
llamar al método apropiado para el tipo de evento.
________________________________________________________________________________________
Proyecto de Software
137
Unidad V: Java en el lado cliente
________________________________________________________________________________________
El método action() tiene una importancia especial ya que controla componentes
básicos como Pushbutton, Checkboxes, Lists, MenuItem y objetos de entrada de
texto TextField, todos ellos producen el evento action, todos los metodos
manejadores de eventos tienen al menos un argumento (Event) y retornan un
valor booleano, al retornar un valor FALSE, el manejador del evento indica que el
evento debe continuar hasta alcanzar una jerarquía mas alta.
Un valor TRUE indica que el evento no debe ser enviado mas alla. El método
handleEvent() casi siempre retorna el método super.handleEvent(), para
asegurarse que todos los eventos son enviados al método manejador de eventos
apropiado.
Eventos Mouse-click
Esto ocurre cuando el usuario hace click, con en el ratón en el cuerpo de un applet
usted puede interceptar los eventos click, por ejemplo para pasar de una URL a
otra, para cambiar el estado de un archivo de audio de on a off, etc.
MouseDown y mouseUp
Cuando usted hace un click con el ratón una sola vez, el AWT genera 2 eventos
uno es el evento mouseDown que ocurre cuando el botón izquierdo del ratón es
presionado y el otro mouseUp que ocurre cuando el botón es liberado.
Usted ya habrá notado la importancia de manejar 2 eventos UP y DOWN, con el
ratón, un ejemplo claro es al seleccionar una opción de un menú.
Ejemplo de uso del evento mouseDown
public boolean mouseDown(Event evt, int x, int y) {
...
}
El metodo mouseDown() y el metodo mouseUp() toman 3 parametros:
o El evento mismo
o Las coordenadas x,y donde el evento ocurrio
El argumento “event” es una instancia de la clase “Event” el cual contiene
información acerca de cuando el evento se generó y el tipo de evento.
Los argumentos x,y le indican dónde ocurrió el click del mouse, veamos por
ejemplo este método que imprime la coordenada x,y.
________________________________________________________________________________________
Proyecto de Software
138
Unidad V: Java en el lado cliente
________________________________________________________________________________________
public boolean mouseDown(Event evt, int x, int y) {
System.out.println("Mouse down aqui fue.. " + x + "," + y);
return true;
}
La otra parte del evento mouse es el método mouseUp() el cual es llamado
cuando el botón del ratón es liberado veamos la sintaxis del evento mouseUp.
public boolean mouseUp(Event evt, int x, int y) {
....
}
Veamos un ejemplo usando los eventos del mouse
---Guardar este archivo como Textmove.java--import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Event;
public class Textmove extends Applet implements Runnable{
String text_in;
int xpos=0;
Thread killme=null;
boolean suspended = false;
public void init(){
text_in=getParameter("text");
}
public void paint(Graphics g){
g.drawString(text_in,xpos,100);
}
public void start(){
if(killme==null){
killme=new Thread(this);
killme.start();
}
}
public void set_x(){
xpos =xpos-5;
if(xpos<-120){
xpos=size().width;
}
}
________________________________________________________________________________________
Proyecto de Software
139
Unidad V: Java en el lado cliente
________________________________________________________________________________________
public void run(){
while(killme != null){
try {Thread.sleep(100);}catch(InterruptedException e){}
set_x();
repaint();
}
}
public boolean handleEvent(Event evt) {
if (evt.id == Event.MOUSE_DOWN) {
if (suspended) {
killme.resume();
} else {
killme.suspend();
}
suspended = !suspended;
}
return true;
}
public void stop(){
if(killme != null)
killme.stop();
killme=null;
}
}
---Compilar usando el javac del JDK--Agregar el siguiente código para su documento HTML:
<HTML>
<TITLE> Eventos del Mouse </TITLE>
<BODY>
<H1> Abajo el Applet</H1><HR>
<APPLET CODE="Textmove.class" WIDTH=150 HEIGHT=100>
</APPLET>
</BODY>
</HTML>
De preferencia guardar todos los archivos en la misma carpeta.
________________________________________________________________________________________
Proyecto de Software
140
Descargar