Esta entrada no tiene nada que ver con la programación pero aprovecha este blog para poneros un corto que trata sobre la educación pública. Un tema que está en boca de todos estos días y que peligra a no ser que reaccionemos.
Me gustaría también pediros, si fuerais tan amables, de votar positivamente el video. Muchas gracias.
miércoles, 22 de febrero de 2012
Internalización en Java
Podemos hacer que nuestros textos en nuestro programa sean traducidos de una manera muy fácil. De esta forma, si el sistema operativo está en español, los textos aparecerán en español y aparecerán en ingles si tenemos el sistema operativo en ingles.
Para conseguir esto debemos seguir varios pasos.
Primero creamos un archivo properties. Lo llamaremos recursos.properties Este archivo contendrá las traducciones.
Ahora crearemos ficheros properties iguales pero que contienen las traducciones. Los archivos se llamarán llamarse igual que este, pero añadiendo _xx o bien _xx_YY donde xx son dos letras que hacen referencia al idioma e YY dos letras que hace referencia al país donde se habla idioma.
Para conseguir esto debemos seguir varios pasos.
Primero creamos un archivo properties. Lo llamaremos recursos.properties Este archivo contendrá las traducciones.
MENU_INICIO=Inicio MENU_PAGINA_INICIO=Página de inicio MENU_SALIR=Salir
Ahora crearemos ficheros properties iguales pero que contienen las traducciones. Los archivos se llamarán llamarse igual que este, pero añadiendo _xx o bien _xx_YY donde xx son dos letras que hacen referencia al idioma e YY dos letras que hace referencia al país donde se habla idioma.
miércoles, 8 de febrero de 2012
Crear directorios en Java
Si queremos crear un directorio con Java, podemos usar la clase File. Después llamaremos a los metodos mkdir() o mkdirs().
Si únicamente ponemos el nombre de la carpeta a crear, deberemos de hacerlo sin barras. Son barras dobles porque sino java interpreta como un signo de escape.
mkdir() asume que la ruta de directorios existe y creará el último directorio.
mkdirs(), todos los directorios anteriores a la carpeta se crearán, existan o no. De este modo no saltará ninguna excepción si es que los directorios no existen.
Estos metodos lanzan SecurityException si es que existe un administrador de seguridad y no permite los nombres de los directorios.
File directorio = new File("c:\\Programas\\directorio");
directorio.mkdir();
Si únicamente ponemos el nombre de la carpeta a crear, deberemos de hacerlo sin barras. Son barras dobles porque sino java interpreta como un signo de escape.
mkdir() asume que la ruta de directorios existe y creará el último directorio.
mkdirs(), todos los directorios anteriores a la carpeta se crearán, existan o no. De este modo no saltará ninguna excepción si es que los directorios no existen.
Estos metodos lanzan SecurityException si es que existe un administrador de seguridad y no permite los nombres de los directorios.
martes, 17 de enero de 2012
Criptografía simétrica y asimétrica
La criptografía se usa para ntercambiar mensajes que sólo puedan ser leídos por usuarios a las que
van dirigidos y que poseen los medios para descifrarlos.
Mediante una clave secreta, ciframos un mensaje y después podemos descrifrar el mensaje con la misma clave u otra distinta. De esta forma hay dos tipos de algoritmos, según cantidad de claves:
Mediante una clave secreta, ciframos un mensaje y después podemos descrifrar el mensaje con la misma clave u otra distinta. De esta forma hay dos tipos de algoritmos, según cantidad de claves:
- Critografía simétrica
- Criptografía asimétrica
lunes, 16 de enero de 2012
Exclusión mutua en Java con Lock
java.util.concurrent.locks.ReentrantLock es una clase en Java para la exclusión mutua, con el mismo comportamiento que los monitores Synchronized pero con más funciones. Entre ellas podemos encontrar:
Para iniciarlo:
Un ejemplo de como asegurar una variable:
- 1. tryLock(): coger el cerrojo si es posible, sino devuelve false.
- 2. tryLock(long timeout, TimeUnit unit): coger el cerrojo antes del timeout y devuelve false después del timeout.
- 3. lockInterruptibly():intenta coger el cerrojo y entrar en el estado wait, pero puede ser interrumpido por otro hilos.
Para iniciarlo:
private Lock cerrojo = new ReentrantLock();
Un ejemplo de como asegurar una variable:
dialog.addWindowListener(new WindowAdapter(){
publicvoid windowClosing(WindowEvent we){
cerrojo.lock();
desconectando = true;
cerrojo.unlock();
}
});
Aquí tenéis la documentación: Enlace.
miércoles, 11 de enero de 2012
Ejemplo MD5 en Java
MD5 es uno algoritmo de reducción criptográfico.
MD5 se utiliza para comprobar que lo que descargamos de internet es el archivo original y no un troyano. También se utiliza para comprobar claves guardando el valor hash en disco y comparando con éste. Aplicando MD5 obtenemos un valor hash de 32 dígitos hexadecimales. Este valor se envía junto con el archivo. El usuario compara el valor hash del archivo obtenido con el valor hash que le han proporcionado y si no son iguales estamos seguros que el archivo ha sufrido un cambio y no es el original.
Podemos cambiar el algoritmo MD5 por MD2, MD4, SHA...
MD5 se utiliza para comprobar que lo que descargamos de internet es el archivo original y no un troyano. También se utiliza para comprobar claves guardando el valor hash en disco y comparando con éste. Aplicando MD5 obtenemos un valor hash de 32 dígitos hexadecimales. Este valor se envía junto con el archivo. El usuario compara el valor hash del archivo obtenido con el valor hash que le han proporcionado y si no son iguales estamos seguros que el archivo ha sufrido un cambio y no es el original.
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
public static String getMD5(String entrada) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(entrada.getBytes());
BigInteger number = new BigInteger(1, messageDigest);
String hashtext = number.toString(16);
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
}
catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws NoSuchAlgorithmException {
System.out.println(getMD5("Nuestra Clave"));
}
}
Podemos cambiar el algoritmo MD5 por MD2, MD4, SHA...
Añadir un evento a un botón Swing
Éste es el código para añadir un evento a un botón Swing en Java.
private JButton boton = new JButton("Botón");
boton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("Click!");
}
});
Aquí tenéis la documentación: Enlace
No dejar redimensionar una ventana SWT
shell = new Shell(SWT.DIALOG_TRIM | SWT.MIN);
De esta forma bloqueamos el redimensionamiento de una ventana(shell) en SWT. Sería el equivalente en swing de
frame.setResizable(false);
Escribimos en el constructor del shell las propiedades y listo.
Si queremos añadir más restricciones a la ventana podemos concatenar cualesquiera de esta lista:
SWT.BORDER SWT.CLOSE SWT.MIN SWT.MAX SWT.RESIZE SWT.TITLE SWT.NO_TRIM SWT.SHELL_TRIM SWT.DIALOG_TRIM SWT.MODELESS SWT.PRIMARY_MODAL SWT.APPLICATION_MODAL SWT.SYSTEM_MODAL
Añadir una barra de progreso a un navegador embebido
Aquí os dejo el código para poder añadir una barra de de progreso a un navegador embebido que está incrustado en un composite de SWT.
Simplemente instanciáis un composite de este tipo y ya tenéis un navegador con su barra de progreso embebido. Con el método browser.setUrl podéis poner la url que queráis cargar.
public class NavegadorEmbebidoSWT extends Composite {
private Browser browser;
ProgressBar progressBar;
boolean busy;
int index;
public NavegadorEmbebidoSWT(Composite parent, String urlEntorno) {
super(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, true);
setLayout(layout);
browser = new Browser(this, SWT.NONE);
GridData layoutData = new GridData(GridData.FILL_BOTH);
layoutData.horizontalSpan = 2;
layoutData.verticalSpan = 2;
browser.setLayoutData(layoutData);
//Barra de progreso
progressBar = new ProgressBar(this, SWT.NONE);
progressBar.setLocation(600, 5);
progressBar.setSize(108, 23);
browser.addProgressListener(new ProgressListener() {
public void changed(ProgressEvent event) {
if (event.total == 0)
return;
int ratio = event.current * 100 / event.total;
if (progressBar != null)
progressBar.setSelection(ratio);
busy = event.current != event.total;
if (!busy) {
index = 0;
}
}
public void completed(ProgressEvent event) {
if (progressBar != null)
progressBar.setSelection(0);
busy = false;
index = 0;
}
});
browser.setUrl(urlEntorno);
}
}
Simplemente instanciáis un composite de este tipo y ya tenéis un navegador con su barra de progreso embebido. Con el método browser.setUrl podéis poner la url que queráis cargar.
martes, 10 de enero de 2012
Referenciar librerías jar en un ejecutable .bat
Esta mañana he estado intentando crear un ejecutable .bat en windows donde ejecutaba un fichero jar. He tenido problemas a la hora de referenciar las librerías. El error que me daba era:
exception in thread main java.lang.noclassdeffounderror
Ahora os voy a explicar como lo he solucionado.
martes, 27 de diciembre de 2011
Tutorial: Ventana con Java Swing
El paquete Swing es parte de "Java Foundation Classes" que provee facilidades a los programadores a la hora de construir una interfaz gráfica o GUI. Swing abarca componentes como tablas, marcos, etiquetas, botones... Se les llama componentes Swing porque pertenecen al paquete javax.swing. Antes de la JDK 1.1 las interfaces gráficas se realizaban a través de AWT o Abstract Window Toolkit, de donde Swing ha heredado todo el manejo de eventos.
Una aplicación Swing se consigue mezclando componentes que siguen estas reglas:
- Debe existir, al menos, un contenedor de alto nivel (Top-Level Container), que provee el soporte a los componentes Swing para que estas se pinten y puedan manejar eventos.
- Habrá más componentes colgando de este contenedor de alto nivel, bien sean contenedores o componentes simples.
lunes, 19 de diciembre de 2011
Tutorial Hibernate y JavaServer Faces (JSF)
En este tutorial usaremos NetBeans para crear una aplicación web que recoja datos de una base de datos y los enseñe en una página web mediante java Server faces (JSF).
La aplicación web usa el Framework Hibernate como capa de persistencia para la recuperación y el almacenamiento de Plain Old Java Objects (POJO).
Requerimientos mínimos:
Creando la base de datos
Creamos una base de datos con el dump “sakila”, un ejemplo gratuito que esta disponible en la página de MySQL. Podéis usar cualquier herramienta para administrar la base de datos como phpMyAdmin, MySQL Administrator, Emma…
Creando el proyecto de la aplicación web
Ahora crearemos una aplicación web. Añadiremos las librerías de Hibernate y JSF.
Requerimientos mínimos:
Creando la base de datos
Creamos una base de datos con el dump “sakila”, un ejemplo gratuito que esta disponible en la página de MySQL. Podéis usar cualquier herramienta para administrar la base de datos como phpMyAdmin, MySQL Administrator, Emma…
Creando el proyecto de la aplicación web
Ahora crearemos una aplicación web. Añadiremos las librerías de Hibernate y JSF.