1. Instituto Universitario Politécnico Santiago Mariño
Escuela de Ingeniería de Sistemas
Porlamar-Estado Nueva Esparta
Programación No Numérica II
APLICACIONES JAVA.
Realizado Por:
BR. Rolman Calderín/ C.I: 19682811
Saia – Profesor: Diógenes Rodriguez
Porlamar, Junio de 2013
Instituto Universitario Politécnico Santiago Mariño
Realizado Por:
BR. Rolman Calderín/ C.I: 19682811
Profesor: Diógenes Rodriguez.
2. Introducción
Java es relativamente un nuevo lenguaje de programación debido a los continuos
cambios, la API (application programming interface) java incorpora muchos aspectos
que en cualquier otro lenguaje son extensiones, threads, ejecución remota, componentes,
seguridad, acceso a bases de datos, entre otros. Por eso es un lenguaje ideal para aprender,
porque incorpora todos estos conceptos de un modo estándar, mucho más sencillo y claro
que con las citadas extensiones de otros lenguajes.
El lenguaje java posee varios atributos dentro de ello podemos destacar que es un
lenguaje simple, esta orientado a objetos, es robusto, seguro, de arquitectura neutra,
multitarea, dinámico, entre muchas otras buenas cualidades. Los programas desarrollados
en Java presentan diversas ventajas frente a otros lenguajes, en lo que podemos destacar
que posee una ejecución como aplicación independiente, ejecución como Applet, ejecución
como Servlet, ente otros.
Las Applets en Java cumplen una gran funcionalidad y fue pensado para ser colocados
dentro de una página web. Estos pueden ser interpretados por cualquier navegador con
capacidades Java. Estos programas se insertan en las páginas usando una etiqueta especial,
como también se insertan vídeos, animaciones flash u otros objetos. Hoy día mediante
applets se pueden integrar en las páginas web aplicaciones multimedia avanzadas, incluso
con imágenes 3D o sonido y vídeo de alta calidad.
3. Entrada y Salida de Datos en Java
Según la pagina web: http://www.ciberaula.com/articulo/java_io
nos dice: Cualquier programa realizado en Java que necesite llevar a cabo una operación de
I/O lo hará a través de un stream. Un stream, cuya traducción literal es "flujo", es una
abstracción de todo aquello que produzca o consuma información. Podemos ver a este
stream como una entidad lógica. La vinculación de este stream al dispositivo físico la hace
el sistema de entrada y salida de Java. Se ve pues la eficacia de esta implementación pues
las clases y métodos de I/O que se necesita
dispositivo con el que se este
con el teclado, el monitor, un sistema de ficheros o un socket de red liberando a nuestro
código de tener que saber con quién está interactuando.
Para traer la información, un programa abr
(un fichero, memoria, un socket) y lee la información seriamente, de esta forma:
Similarmente, un programa puede enviar información a un destino externo abriendo un
stream sobre un destino y escribiendo la
Entrada y Salida de Datos en Java
http://www.ciberaula.com/articulo/java_io visitada el 29/06/2013
Cualquier programa realizado en Java que necesite llevar a cabo una operación de
vés de un stream. Un stream, cuya traducción literal es "flujo", es una
abstracción de todo aquello que produzca o consuma información. Podemos ver a este
stream como una entidad lógica. La vinculación de este stream al dispositivo físico la hace
a de entrada y salida de Java. Se ve pues la eficacia de esta implementación pues
y métodos de I/O que se necesita emplear son las mismas independientemente de
dispositivo con el que se este actuando, luego, el núcleo de Java, sabrá si tiene que tratar
con el teclado, el monitor, un sistema de ficheros o un socket de red liberando a nuestro
código de tener que saber con quién está interactuando.
Para traer la información, un programa abre un stream sobre una fuente de información
(un fichero, memoria, un socket) y lee la información seriamente, de esta forma:
Similarmente, un programa puede enviar información a un destino externo abriendo un
stream sobre un destino y escribiendo la información seriamente, de esta forma:
visitada el 29/06/2013
Cualquier programa realizado en Java que necesite llevar a cabo una operación de
vés de un stream. Un stream, cuya traducción literal es "flujo", es una
abstracción de todo aquello que produzca o consuma información. Podemos ver a este
stream como una entidad lógica. La vinculación de este stream al dispositivo físico la hace
a de entrada y salida de Java. Se ve pues la eficacia de esta implementación pues
emplear son las mismas independientemente del
actuando, luego, el núcleo de Java, sabrá si tiene que tratar
con el teclado, el monitor, un sistema de ficheros o un socket de red liberando a nuestro
e un stream sobre una fuente de información
(un fichero, memoria, un socket) y lee la información seriamente, de esta forma:
Similarmente, un programa puede enviar información a un destino externo abriendo un
información seriamente, de esta forma:
4. Byte streams: nos proporciona un medio adecuado para el manejo de entradas y salidas
de bytes y su uso lógicamente está orientado a la lectura y escritura de datos binarios. El
tratamiento del flujo de bytes v
InputStream y OutputStream. Cada una de estas clases abstractas
concretas que controlan las diferencias ente los distintos dispositivos de I/O que se pueden
utilizar. Así mismo, estas dos clases son las que definen los métodos que sus subclases
tendrán implementados y, de entre todas, destacan las clases read() y write() que leen y
escriben bytes de datos respectivamente.
Character streams: Proporciona un medio conveniente para el manejo de entradas y
salidas de caracteres. Dichos flujos usan codificación Unicode y, por tanto, se pueden
internacionalizar. Una observación: Este es un modo que Java nos proporciona para
manejar caracteres pero al nivel más bajo todas las operaciones de I/O son orientadas a
byte. Al igual que la anterior el flujo de caracteres también viene gobernado por dos clases
abstractas: Reader y Writer. Dichas clases manejan flujos de caracteres Unicode. Y también
de ellas derivan subclases concretas que implementan los métodos definidos en ellas siendo
los más destacados los métodos read() y write() que, en este caso, leen y escriben caracteres
de datos respectivamente.
Un File es el único objeto del paquete de E/S que referencia a un archivo de disco real.
La clase File no especifica cómo se recupera o almacena la información en los archivos;
sólo describe las propiedades de un objeto archivo.
os proporciona un medio adecuado para el manejo de entradas y salidas
de bytes y su uso lógicamente está orientado a la lectura y escritura de datos binarios. El
tratamiento del flujo de bytes viene gobernado por dos clases abstractas que son
InputStream y OutputStream. Cada una de estas clases abstractas tienen varias subclases
concretas que controlan las diferencias ente los distintos dispositivos de I/O que se pueden
dos clases son las que definen los métodos que sus subclases
tendrán implementados y, de entre todas, destacan las clases read() y write() que leen y
escriben bytes de datos respectivamente.
: Proporciona un medio conveniente para el manejo de entradas y
salidas de caracteres. Dichos flujos usan codificación Unicode y, por tanto, se pueden
internacionalizar. Una observación: Este es un modo que Java nos proporciona para
al nivel más bajo todas las operaciones de I/O son orientadas a
byte. Al igual que la anterior el flujo de caracteres también viene gobernado por dos clases
abstractas: Reader y Writer. Dichas clases manejan flujos de caracteres Unicode. Y también
s derivan subclases concretas que implementan los métodos definidos en ellas siendo
los más destacados los métodos read() y write() que, en este caso, leen y escriben caracteres
es el único objeto del paquete de E/S que referencia a un archivo de disco real.
La clase File no especifica cómo se recupera o almacena la información en los archivos;
sólo describe las propiedades de un objeto archivo.
os proporciona un medio adecuado para el manejo de entradas y salidas
de bytes y su uso lógicamente está orientado a la lectura y escritura de datos binarios. El
iene gobernado por dos clases abstractas que son
varias subclases
concretas que controlan las diferencias ente los distintos dispositivos de I/O que se pueden
dos clases son las que definen los métodos que sus subclases
tendrán implementados y, de entre todas, destacan las clases read() y write() que leen y
: Proporciona un medio conveniente para el manejo de entradas y
salidas de caracteres. Dichos flujos usan codificación Unicode y, por tanto, se pueden
internacionalizar. Una observación: Este es un modo que Java nos proporciona para
al nivel más bajo todas las operaciones de I/O son orientadas a
byte. Al igual que la anterior el flujo de caracteres también viene gobernado por dos clases
abstractas: Reader y Writer. Dichas clases manejan flujos de caracteres Unicode. Y también
s derivan subclases concretas que implementan los métodos definidos en ellas siendo
los más destacados los métodos read() y write() que, en este caso, leen y escriben caracteres
es el único objeto del paquete de E/S que referencia a un archivo de disco real.
La clase File no especifica cómo se recupera o almacena la información en los archivos;
5. Los archivos son un origen y un destino primario de los datos dentro de la mayoría de
los programas. A pesar de que se les imponente restricciones severas cuando se utilizan
dentro de applets, los archivos siguen siendo un recurso básico para almacenar información
persistente y compartida. Los objetos archivo se pueden crear utilizando uno de los tres
constructores disponibles.
El ejemplo siguiente crea tres archivos: f1, f2 y f3. El primer objeto File se construye
utilizando un trayecto de directorio como único argumento. El segundo se crea utilizando
dos argumentos, el trayecto y el nombre de archivo. El tercero se crea utilizando el trayecto
de archivo asignado a f1 y un nombre de archivo; f3 refiere al mismo archivo que f2.
File f1 = new File("/");
File f2 = new File("/","autoexec.bat");
File f3 = new File(f1, "autoexec.bat");
InputStream InputStream es una clase abstracta que define el modelo de Java para el
flujo de entrada. Todos los métodos de esta clase lanzarán una IOException si se producen
condiciones de error.
Este es un breve resumen de los métodos de InputStream: read() devuelve una
representación como entero del siguiente byte de entrada disponible.
Read (byte[]) intenta leer hasta b.length bytes situándolos en b y devuelve el número
real de bytes que se leyeron con éxito. read(byte b[], int off, int len) intenta leer hasta len
bytes situándolos en b comenzando en b[off], y devuelve el número de bytes que se leyeron
con éxito.
skip(long n) omite n bytes de la entrada, y devuelve el número de bytes que se han
omitido. available() devuelve el número de bytes de entrada disponibles actualmente para
su lectura.
6. close() cierra el origen de entrada. Los intentos de lectura posteriores generarán una
IOException. mark(int limitelectura) coloca una marca en el punto actual del flujo de
entrada que seguirá siendo válida hasta que se lean limitelectura bytes.
reset() devuelve el puntero de entrada ala marca establecida previamente.
markSupported() devuelve true si se admiten mark/reset en este flujo.
OutputStream Igual que InputStream, OutputStream es una clase abstracta que define el
flujo de salida. Todos los métodos de esta clase devuelven un valor void y lanzan una
IOException en caso de error.
Esta es una lista de los métodos de OutputStream: write (int b) escribe un único byte en
un flujo de salida. Observar que el parámetro en un int, lo que permite que se llame a write
con expresiones sin tener que convertir su tipo a byte.
Write (byte b[]) escribe una matriz completa de bytes en un flujo de salida. Write (byte
b[], int off, int len) escribe len bytes de la matriz b, comenzando a partir de b[off].
flush() inicializa el estado de la salida de manera que se limpian todos los buffers.
Close () cierra el flujo de salida. Los intentos de escritura posteriores generarán una
IOException.
Clases de Java Para Lectura y Escritura de Datos
Según la pagina web: http://chuwiki.chuidiang.org visitada el 29/06/2013 nos dice: Una
clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan
sobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina
variables, métodos o funciones miembro. La programación orientada a objetos se basa en la
programación de clases. Un programa se construye a partir de un conjunto de clases. Una
vez definida e implementada una clase, es posible declarar elementos de esta clase de modo
similar a como se declaran las variables del lenguaje (int,double, string). Los elementos
declarados de una clase se denominan objetos de la clase. De una única clase se pueden
7. declarar o crear numerosos objetos. La clase es lo genérico: es el patrón o modelo para
crear objetos.
Cada objeto tiene sus propias copias de las variables miembro, con sus propios valores,
en general distintos de los demás objetos de la clase. Las clases pueden tener variables
static, que son propias de la clase y no de cada objeto.
Podemos abrir un fichero de texto para leer usando la clase FileReader. Esta clase tiene
métodos que nos permiten leer caracteres. Sin embargo, suele ser habitual querer las líneas
completas, bien porque nos interesa la línea completa, bien para poder analizarla luego y
extraer campos de ella.
FileReader no contiene métodos que nos permitan leer líneas completas, pero
sí BufferedReader. Afortunadamente, se puede construir un BufferedReader a partir
del FileReader de la siguiente forma:
1
2
3
4
5
File archivo = new File ("C:archivo.txt");
FileReader fr = new FileReader (archivo);
BufferedReader br = new BufferedReader(fr);
...
String linea = br.readLine();
El siguiente código escribe un fichero de texto desde cero.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.io.*;
public class EscribeFichero
{
public static void main(String[] args)
{
FileWriter fichero = null;
PrintWriter pw = null;
try
{
fichero = new FileWriter("c:/prueba.txt");
pw = new PrintWriter(fichero);
for (int i = 0; i < 10; i++)
pw.println("Linea " + i);
} catch (Exception e) {
8. 18
19
20
21
22
23
24
25
26
27
28
29
30
e.printStackTrace();
} finally {
try {
// Nuevamente aprovechamos el finally para
// asegurarnos que se cierra el fichero.
if (null != fichero)
fichero.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
Si se quiere añadir al final de un fichero ya existente, simplemente se debe colocar un
flag a true como segundo parámetro del constructor de FileWriter.
FileWriter fichero = new FileWriter("c:/prueba.txt",true);
Entrada y Salida Estándar (Teclado y Pantalla)
Según http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/archivos/teclado.htm
esta pagina web visitada el 29/06/2013 nos dice: La entrada/salida estándar (normalmente
el teclado y la pantalla, respectivamente) se definen mediante dos objetos que puede usar el
programador sin tener que crear flujos específicos.
La clase System tiene un miembro dato denominado in que es una instancia de la
clase InputStream que representa al teclado o flujo de entrada estándar. Sin embrago, el
miembro out de la clase System es un objeto de la clase PrintStream, que imprime texto en
la pantalla (la salida estándar).
Para leer un carácter solamente tenemos que llamar a la función read desde System.in.
try{
System.in.read();
}catch (IOException ex) { }
9. Obligatoriamente, el proceso de lectura ha de estar en un bloque try..catch. Esta porción
de código es la que se ha empleado en muchas aplicaciones para detener la ejecución de
una aplicación hasta que se pulse la tecla “Retorno”.
Para leer un conjunto de caracteres hasta que se pulse la tecla Retorno se escribe:
StringBuffer str=new StringBuffer();
char c;
try{
while ((c=(char)System.in.read())!='n'){
str.append(c);
}
}catch(IOException ex){}
La clase StringBuffer es una clase que nos permite crear strings. Contiene métodos para
añadir nuevos caracteres a un buffer y convertir el resultado final en un string. Las
principales funciones miembro soninsert y append. Usamos una versión de esta última
función para añadir un carácter al final de un objeto de la clase StringBuffer.
Para convertir un objeto str de la clase StringBuffer a String se usa la función
miembro toString. Esta llamada se hace de forma implícita cuando dicho objeto se le pasa
a System.out.println.
System.out.println(str);
Finalmente, se ha de hacer notar, que la función read miembro de InputStream devuelve
un int que es promocionado a char.
Existe la posibilidad de conectar el objeto System.in con un objeto de la
clase InputStreamReader para leer los caracteres tecleados por el usuario. Esta conexión se
realiza mediante la sentencia:
Reader entrada = new InputStreamReader(System.in);
Para leer una sucesión de caracteres se emplea un código similar
StringBuffer str=new StringBuffer();
10. char c;
try{
Reader entrada=new InputStreamReader(System.in);
while ((c=(char)entrada.read())!='n'){
str.append(c);
}
}catch(IOException ex){}
Para imprimir los caracteres leídos se escribe como en la sección anterior:
System.out.println(str);
Podemos usar la segunda versión de la función read para leer el conjunto de caracteres
tecleados por el usuario.
char[] buffer=new char[255];
try{
Reader entrada=new InputStreamReader(System.in);
int numBytes=entrada.read(buffer);
System.out.println("Número de bytes leídos "+numBytes);
}catch(IOException ex){ }
En esta segunda porción de código, se lee un conjunto de caracteres hasta que se pulsa la
tecla Retorno, los caracteres se guardan en el array buffer. La función read devuelve el
número de caracteres leídos.
Para imprimir los caracteres leídos se crea un objeto str de la clase String a partir de un
array de caracteres buffer, empleando uno de los constructores de dicha clase. A
continuación, se imprime el string str.
String str=new String(buffer);
System.out.println(str);
11. Lectura y Escritura de Archivos
Según la pagina web: http://es.scribd.com/doc/13562650/130/Lectura-y-Escritura-de-
Archivos-II visitada el 29/06/2013 nos dice: Las clases FileInputStream y FileOutputStream
permiten leer y escribir bytes en archivos binarios. Las clases FileReader y FileWriter
permiten leer y escribir caracteres en archivos de texto. Cada llamada a read() o write()
accede al disco para un único byte o un único carácter ⇒ poco eficiente. Para mejorarlo, se
utilizan las clases que implementan un buffer, de modo que se lee del disco (o se escribe) un
conjunto de bytes o caracteres en cada acceso.
En la lectura, los constructores de FileInputStream y FileReader, si no encuentran el archivo
indicado, pueden lanzar la excepción FileNotFoundException. En la escritura, los
constructores de FileOutputStream y FileWriter pueden lanzar la excepción IOException. Si no
se encuentra el archivo dado, se crea nuevo. Si ya existe, por defecto escribe desde el
comienzo; pero se puede indicar que añada al final (con un 2ºparámetro true).
FileInputStream fis = n e w F i l e I n p u t S t r e a m ( “ f i c h . b i n ” ) ;
BufferedInputStream bis = new BufferedInputStream (fis);
i n t b = b i s . r e a d ( ) ; / / l e e u n s ó l o byte, pero llena
//el buffer de datos para
//próximas lectura
Serialización
Serialización de un Objeto: Implementar Serializable
Para que un programa java pueda convertir un objeto en un montón de bytes y pueda
luego recuperarlo, el objeto necesita ser Serializable. Al poder convertir el objeto a bytes,
ese objeto se puede enviar a través de red, guardarlo en un fichero, y después reconstruirlo
al otra lado de la red, leerlo del fichero. Según la siguiente página web:
http://chuwiki.chuidiang.org/index.php?title=Serializaci%C3%B3n_de_objetos_en_java
visitada el 29/06/2013 nos dice:
Para que un objeto sea serializable basta con que implemente la interfaz Serializable.
Como la interfaz Serializable no tiene métodos, es muy sencillo implementarla, basta con
12. unimplements Serializable y nada más. Por ejemplo, la clase Datos siguiente
es Serializable y java sabe perfectamente enviarla o recibirla por red, a través de socket o
de rmi. También java sabe escribirla en un fichero o reconstruirla a partir del fichero.
public class Datos implements Serializable
{
public int a;
public String b;
public char c;
}
Si dentro de la clase hay atributos que son otras clases, éstos a su vez también deben
ser Serializable. Con los tipos de java (String, Integer, etc.) no hay problema porque lo son.
Si ponemos como atributos nuestras propias clases, éstas a su vez deben
implementar Serializable. Por ejemplo
/* Esta clase es Serializable porque implementa Serializable y todos sus
* campos son Serializable, incluido "Datos f;"
*/
public class DatoGordo implements Serializable
{
public int d;
public Integer e;
Datos f;
}
Serializacion a Medida
En realidad, se llama "serializar un objeto" al proceso de convertirlo a bytes, para poder
enviarlo por una red, y reconstruirlo luego a partir de esos bytes.
A veces podemos necesitar que se haga algo especial en el momento de serializarlo, bien
al construirlo a bytes, bien al recibirlo. Por ello java nos permite hacerlo. Basta con hacer
que nuestro objeto defina uno o los dos métodos siguientes:
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException
{
// Aqui debemos leer los bytes de stream y reconstruir el objeto
}
private void writeObject(java.io.ObjectOutputStream stream)
13. throws IOException
{
// Aquí escribimos en stream los bytes que queramos que se envien por red.
}
Java llamará a estos métodos cuando necesite convertirlo a bytes para enviarlo por red o
cuando se necesite reconstruirlo a partir de los bytes en red.
Lectura de un Archivo en un Servidor de Internet
package com.chuidiang.ejemplos;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class PruebaHTTP {
public static void main(String[] args) {
try {
// Se abre la conexión
URL url = new URL("http://www.chuidiang.com");
URLConnection conexion = url.openConnection();
conexion.connect();
// Lectura
InputStream is = conexion.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char[] buffer = new char[1000];
int leido;
while ((leido = br.read(buffer)) > 0) {
System.out.println(new String(buffer, 0, leido));
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
14. El código es sencillo. Se hace un new URL() con la URL en cuestión. Llamamos al
método openConnection() y luego connect(). Sólo queda obtener el InputStream de lectura
y leer en él como mejor nos venga para nuestras necesidades. En el ejemplo se va leyendo
en buffer de caracteres y sacándolo por pantalla, por lo que se obtiene en pantalla el texto
html de la página cuya URL hemos abierto (suponiendo que esa URL tenga un texto html).
Este ejemplo se encuentra en la página web dispuesta a continuación visitada el
29/06/2013: http://chuwiki.chuidiang.org/index.php?title=Lectura_http_y_https_desde_java
Java Foundation Classes (JFC) y Java 2D
Según la pagina web: http://zarza.usal.es/~fgarcia/doc/tuto2/IV_1.htm visitada el
29/06/2013 nos dice:
Java Foundation Classes (JFC)
JFC es la abreviatura de Java Foundation Classes, que comprende un grupo de
características para ayudar a construir interfaces gráficos de usuario (GUIs). Se creo como
una extensión de AWT. Comprende las siguientes características:
o Componentes Swing.
o API de accesibilidad.
o Java 2D API
o Soporte de Drag and Drop.
Modelo de Eventos
Tanto AWT como Swing tienen en común un sistema para gestionar los eventos que se
producen al interactuar con el usuario de la interfaz gráfica; su modelo de eventos. El
funcionamiento del modelo de eventos se basa en la gestión de excepciones.
Para cada objeto que represente una interfaz gráfica, se pueden definir objetos "oyentes"
(Listener), que esperen a que suceda un determinado evento sobre la interfaz. Por ejemplo
15. se puede crear un objeto oyente que esté a la espera de que el usuario pulse sobre un botón
de la interfaz, y si esto sucede, él es avisado, ejecutando determinada acción.
La clase base para todos estos eventos que se pueden lanzar es la
clase AWTEvent (perteneciente al paquete java.awt). El modelo de eventos de AWT
depende del paquete java.awt.event, que en Swing se amplía con el
paquete javax.swing.event.
Existen dos tipos básicos de eventos:
o Físicos: Corresponden a un evento hardware claramente
identificable. Ejemplo: se ha pulsado una tecla (KeyStrokeEvent).
o Semánticos: Se componen de un conjunto de eventos físicos, que
sucedidos en un determinado orden tienen un significado más
abstracto: El usuario ha elegido un elemento de una lista desplegable
(ItemEvent).
Subpaquetes de AWT
A continuación se enumeran los paquetes que componen las JFC, así como su
funcionalidad, ordenados por orden de antigüedad. Esto es importante, porque debe de
tenerse en cuenta si se va a utilizar para crear applets, ya que normalmente los navegadores
no soportan la última versión de la API de Java en su propia máquina virtual.
Si se quiere que la applet se vea igual en varios navegadores, hay que tener en cuenta
qué paquetes se pueden utilizar y cuáles no, comprobando la versión de Java que soportan
los navegadores en los que van a trabajar.
Desde la Versión 1.0
o java.awt: Contiene todas las clases básicas de AWT para crear
interfaces e imprimir gráficos e imágenes, así como la clase base
para los eventos en componentes: AWTEvent.
16. o java.awt.image: Para crear y modificar imágenes. Utiliza productores
de imágenes, filtros y "consumidores de imágenes". Permite
renderizar una imagen mientras está siendo generada.
Desde la Versión 1.1
o java.awt.datatransfer: Transferencia de datos entre aplicaciones.
Permite definir clases "transferibles" entre aplicaciones, y da soporte
al mecanismo del portapapeles (copiar y pegar).
o java.awt.event: Modelo de eventos de AWT. Contiene eventos,
oyentes y adaptadores a oyentes.
Desde la Versión 1.2
o java.awt.color: Utilización de colores. Contiene la implementación
de una paleta de colores basada en la especificada por el ICC
(Consorcio Internacional de Color).
o java.awt.dnd: Operaciones de arrastrar y soltar.
o java.awt.font: Todo lo referente a las fuentes de texto. Soporta
fuentes del tipo True Type, Type 1, Type 1 Multiple Master, y
OpenType.
o java.awt.geom: Aporta clases de Java 2D, para crear objetos en 2
dimensiones, utilizando geometría plana (elipses, curvas, áreas).
o java.awt.im: Para utilizar símbolos Japoneses, Chinos o Coreanos.
o java.awt.image.renderable: Para producir imágenes que
sean independientes de redering (animación).
o java.awt.print: Para imprimir documentos. Incorpora capacidad para
gestionar diversos tipos de documentos, formatos de página e
interactuar con el usuario para controlar la impresión de trabajos.
Java 2D
Java2D es una de las APIs (Application Program Interface) más ricas que proporciona la
edición estándar de Java (J2SE). Java 2D aborda tres áreas principales que integran Java2D:
17. figuras geométricas, imágenes y dibujo de texto. Asimismo se introducen en profundidad
los conceptos generales que pueden aplicarse a todos ellos, como pueden ser el tratamiento
del color y de la transparencia, la gestión de transformaciones geométricas o la
manipulación de ficheros JPEG.
A medida que se van introduciendo nuevas clases de la API, éstas se van hilvanando
entre sí para proporcionar al programador un mayor control sobre el aspecto de los lienzos
que quiera dibujar. De esta forma se estudia, entre otras muchas cosas, el dibujo de figuras
sobre fotografías digitales, la sobreimpresión de texto sobre imágenes e incluso la
utilización del contorno de un texto en negrita como elemento a través del que ver una
imagen de fondo.
Cada uno de los conceptos necesarios se introduce desde cero, aunque se suponen
conocimientos del lenguaje Java, y se proporcionan numerosos ejemplos completos que
pueden ser puestos en práctica sin más modificación que la de elegir la foto preferida que se
desea transformar, o modificar la cadena de texto a visualizar. Cada ejemplo se acompaña
de una adecuada explicación sobre las líneas de código vitales que producen el efecto que
se desea conseguir en cada caso, por lo que al lector le resultará muy cómodo realizar
modificaciones personalizadas y obtener sus propios resultados. La inclusión de las
imágenes que resultan de cada uno de los ejemplos comentados también ayuda
enormemente a la comprensión del código y facilita la asimilación de conceptos.
Java Media Framework (JMF)
Según la pagina web: http://blogdejuls.blogspot.com/2007/04/java-media-framework.html
visitada el 29/06/2013 nos dice: JMF es una API que sirve para incluir multimedia en las
aplicaciones de Java, funciona básicamente, recibiendo el contenido multimedia de alguna
fuente, para después procesarlo y entregarlo en alguna salida multimedia.
18. Para entender mejor la arquitectura
que es muy ilustrativa y ayuda a comprender mejor esta API.
La videocámara y el casete de video que se muestran en esta imagen, como fuente de
multimedia bien podría ser un archivo mpg
son una televisión y unas bocinas que serian la applet en el cual se van a
contenidos multimedia. Lo único que
mas sencilla de poner un reprod
Instanciamos un Media Player, asi:
MediaPlayer player = new javax.media.bean.playerbean.MediaPlayer():
Para entender mejor la arquitectura de JMF en la página de Java muestran esta image
ayuda a comprender mejor esta API.
La videocámara y el casete de video que se muestran en esta imagen, como fuente de
multimedia bien podría ser un archivo mpg y los dispositivos de salida que en la imagen
ión y unas bocinas que serian la applet en el cual se van a
os multimedia. Lo único que haría falta entonces seria el reproductor.
poner un reproductor en la applet es utilizando el MediaPlayer Bean.
tanciamos un Media Player, asi:
player = new javax.media.bean.playerbean.MediaPlayer():
muestran esta imagen,
La videocámara y el casete de video que se muestran en esta imagen, como fuente de
y los dispositivos de salida que en la imagen
ión y unas bocinas que serian la applet en el cual se van a presentar los
entonces seria el reproductor. La manera
tilizando el MediaPlayer Bean.
player = new javax.media.bean.playerbean.MediaPlayer():
19. Para decirle al player que archivo queremos reproducir se utiliza la siguiente linea:
player.setMediaLocation (dirección del archivo);
Para iniciar, detener o pausar la reproducción, se usan las siguientes líneas
respectivamente:
player.start();
player.close();
player.stop();
Java 3D
Según la pagina web: http://www.programacion.com/articulo/java_3d_169 visitada el
29/06/2013 nos dice: El API 3D de Java es un árbol de clases Java que sirven como
interface para sistemas de renderizado de gráficos tridimensionales y un sistema de sonido.
El programador trabaja con constructores de alto nivel para crear y manipular objetos
geométricos en 3D. Estos objetos geométricos residen en un universo virtual, que luego es
renderizado. El API está diseñado con flexibilidad para crear universos virtuales precisos
de una amplia variedad de tamaños, desde astronómicos a subatómicos.
A pesar de toda esta funcionalidad, el API es sencillo de usar. Los detalles de
renderizado se manejan automáticamente. Aprovechándose de los Threads Java, el
renderizador Java 3D es capaz de renderizar en paralelo. El renderizador también puede
optimizarse automáticamente para mejorar el rendimiento del renderizado.
Un programa Java 3D crea ejemplares de objetos Java 3D y los sitúa en un estructura de
datos de escenario gráfico. Este escenario gráfico es una composición de objetos 3D en una
estructura de árbol que especifica completamente el contenido de un universo virtual, y
cómo va a ser renderizado.
20. Los programas Java 3D pueden escribirse para ser ejecutados como aplicaciones
solitarias o como applets en navegadores que hayan sido extendidos para soportar Java 3D,
o ambos.
Java Beans
Según la pagina web: http://www.slideshare.net/BorisSalleg/java-beans-en-jsp visitada
el 29/06/2013 nos dice: Los JavaBeans son un modelo de componentes creado por Sun
Microsystems para la construcción de aplicaciones en Java. Se usan para encapsular varios
objetos en un único objeto (Bean en inglés), para hacer uso de un solo objeto en lugar de
varios más simples.
La especificación de JavaBeans de Sun Microsystems los define como "componentes de
software reutilizables que se puedan manipular visualmente en una herramienta de
construcción". A pesar de haber muchas semejanzas, los JavaBeans no deben confundirse
con los Enterprise JavaBeans (EJB), una tecnología de componentes del lado servidor que
es parte de Java EE.
Para funcionar como una clase JavaBean, una clase debe obedecer ciertas convenciones
sobre nomenclatura de métodos, construcción y comportamiento. Estas convenciones
permiten tener herramientas que puedan utilizar, reutilizar, sustituir y conectar JavaBeans.
Las convenciones requeridas son:
o Debe tener un constructor sin argumentos.
o Sus propiedades deben ser accesibles mediante métodos get y set que
siguen una convención de nomenclatura estándar.
o Debe ser serializable.
Dentro de un JavaBean podemos distinguir tres partes:
o Propiedades: Los atributos que contiene.
o Métodos: Se establecen los métodos get y set para acceder y modificar
los atributos.
o Eventos: Permiten comunicar con otros JavaBeans.
21. RMI y JAVA IDL
Según la pagina web: http://es.scribd.com/doc/51830722/206/RMI-Y-JAVA-IDL visitada
el 29/06/2013 nos dice: Tanto RMI (remote method invocation) como JAVA IDL (java
interface definition language) son herramientas para desarrollar aplicaciones distribuidas.
Estas aplicaciones presentan la característica, de que una aplicación puede
ejecutar funciones y métodos en varios ordenadores distintos. Utilizando una referencia a
un objeto que se encuentra en un ordenador remoto, es posible ejecutar métodos de ese
objeto desde una aplicación que se ejecuta en un ordenador distinto. RMI y JAVA IDL
proporcionan los mecanismos mediante los cuales los distintos objetos distribuidos se
comunican y se transmiten la información. Son por lo tanto tecnologías que permiten la
creación y uso de objetos distribuidos, esto es, objetos o programas que interactúan en
diferentes plataformas y ordenadores a través de una red.
RMI es una solución basada íntegramente en java. Incorpora métodos para localizar los
objetos remotos, comunicarse con ellos e incluso enviar un objeto de java, "por valor", de
un objeto distribuido a otro.java IDL permite la conectividad entre objetos distribuidos
utilizando corba (common object request broker architecture). Corba es un estándar para la
interconexión entre objetos distribuidos. Existen implementaciones de corba en varios
lenguajes, lo que posibilita comunicar objetos realizados en distintos lenguajes como Java,
C/C++, Cobol, tanto RMI como Java IDL están incluidos en el JDK 1.2 de sun. En el caso
de Java IDL se precisa de una utilidad adicional (llamada IDLTOJava) que genera el código
necesario para comunicarse con cualquier implementación corba.
Java ative Interface (J I)
Según la pagina web: http://homepage.cs.uiowa.edu/~slonnegr/wpj/JNI.pdf visitada el
29/06/2013 nos dice: El JNI se usa para escribir métodos nativos que permitan solventar
situaciones en las que una aplicación no puede ser enteramente escrita en Java, como por
ejemplo en el caso de que la biblioteca estándar de clases no proporcione soporte para
funcionalidades dependientes de la plataforma.
22. También se usa para modificar programas existentes escritos en algún otro lenguaje,
permitiéndoles ser accesibles desde aplicaciones Java. Muchas de las clases de la API
estándar de Java dependen del JNI para proporcionar funcionalidad al desarrollador y al
usuario, por ejemplo las funcionalidades de sonido o lectura/escritura de ficheros. El
desarrollador debe asegurarse que la API estándar de Java no proporciona una determinada
funcionalidad antes de recurrir al JNI, ya que la primera ofrece una implementación segura
e independiente de la plataforma.
El framework JNI permite a un método nativo utilizar los objetos Java de la misma
forma en que el propio código de Java lo hace. Un método nativo puede crear objetos Java;
examinarlos y utilizarlos para que lleven a cabo su función. Un método nativo puede
asimismo examinar y utilizar objetos que han sido creados por código de aplicación escrito
en Java.
A menudo se denomina a JNI como la "válvula de escape" para desarrolladores dado
que les permite añadir funcionalidades a sus aplicaciones que el API de Java no puede
proporcionar. Puede ser usado para interactuar con código escrito en otros lenguajes como
C++, también se usa para operaciones y cálculos de alta complejidad temporal, porque el
código nativo es por lo general más rápido que el que se ejecuta en una máquina virtual.
23. Conclusión
El lenguaje de programación Java, permite el desarrollo de aplicaciones bajo el esquema
de Cliente Servidor, como de aplicaciones distribuidas, lo que lo hace capaz de conectar
dos o más computadoras u ordenadores, ejecutando tareas simultáneamente, y de esta forma
logra distribuir el trabajo a realizar.
Java es un lenguaje interpretado, y esto es lo que permite que los programas Java puedan
ser ejecutados en una gran variedad de entornos.
Una vez que existe el programa intérprete para un sistema dado, cualquier programa
Java puede ejecutarse en esa plataforma.
Un applet Java es un programa diseñado para ser transmitido a través de Internet o de
una Intranet, desde un servidor web a un cliente, y ser ejecutado en un navegador web
compatible con Java.
Los applets Java no presentan problemas de seguridad, pues su ejecución se realiza
dentro del entorno del navegador.
Estos applets no son simples ficheros de imagen, sonido o animación, sino que son
verdaderos programas, que pueden reaccionar ante las acciones del usuario y cambiar
dinámicamente, no sólo ejecutar repetidamente la misma animación.
En resumen cualquier tipo de aplicación se puede realizar con ella. Java permite la
modularidad por lo que se pueden hacer rutinas individuales que sean usadas por más de
una aplicación.
Sin duda alguna uno de los mejores lenguajes de programación en la actualidad y con
una gran cantidad de aplicaciones informáticas que pueden ser usadas en distintas ramas de
la ciencia y tecnología.