Ya he acabado la implementación de un chat, al menos eso creo. Muchas vueltas a la cabeza y al final la solución me ha quedado relativamente corta.
Por una parte, la clase Cliente, la cual simplemente crea el socket para conectarse al servidor y una instancia de una clase que la he llamado Vista, que recibirá ese socket y el nombre del usuario.
La clase vista crea el interfaz gráfico (de ahí su nombre) y las conexiones para leer y escribir en el socket (BufferedReader y PrintWriter). Además crea un hilo para ir leyendo los mensajes y ponerlos en pantalla y un ActionListener para que cuando se pulse el botón envie el mensaje en el PrintWriter.
La otra parte es la clase Servidor, una clase que define su socket y tiene un bucle infinito que va escuchando peticiones de clientes, y para cada petición crea una instancia de una clase llamada "EnvioDatos", la cual implementa a Runnable.
Esta clase se encarga de hacer llegar los mensajes a los demás clientes. La clave ha sido usar la clase Vector, la cual almacena hilos y podemos usar la sincronización para recorrerla y soltar el mensaje a todos los clientes.
Lo dicho, más lineas aquí que en el código ^^
Proyectos con tecnología Java UJI 2011
martes, 15 de marzo de 2011
jueves, 24 de febrero de 2011
Empezando Java Avanzado
Ya no me tengo que llevar el pen a clase gracias a subeclipse. Gracias a la utilización del Subversion he perdido peso en la mochila :) . Aunque la verdadera importancia radica en el trabajo en grupo, por que con ello todos podemos implicarnos directamente en el mismo programa.
También hemos empezado a programar interfaces gráficas con Swing y manejo de hilos para gestionar recursos compartidos. Aquí dejo un pequeño ejemplo de como manejar las 2 cosas, una interfaz gráfica donde tenemos 5 botones, todos a un mismo escuchador, y al pulsarlos nos muestra por consola su texto:
Semana.java
También hemos empezado a programar interfaces gráficas con Swing y manejo de hilos para gestionar recursos compartidos. Aquí dejo un pequeño ejemplo de como manejar las 2 cosas, una interfaz gráfica donde tenemos 5 botones, todos a un mismo escuchador, y al pulsarlos nos muestra por consola su texto:
Semana.java
public class Semana{
public Semana() {};
public void ejecuta() {
JFrame jfMarco = new JFrame("Ejemplo con JButtons");
JButton jbBotonL = new JButton("Lunes");
JButton jbBotonM = new JButton("Martes");
JButton jbBotonW = new JButton("Miercoles");
JButton jbBotonJ = new JButton("Jueves");
JButton jbBotonV = new JButton("Viernes");
jfMarco.getContentPane().setLayout(new FlowLayout());
jfMarco.getContentPane().add(jbBotonL);
jfMarco.getContentPane().add(jbBotonM);
jfMarco.getContentPane().add(jbBotonW);
jfMarco.getContentPane().add(jbBotonJ);
jfMarco.getContentPane().add(jbBotonV);
EscuchadorBoton otro = new EscuchadorBoton();
jbBotonL.addActionListener(otro);
jbBotonM.addActionListener(otro);
jbBotonW.addActionListener(otro);
jbBotonJ.addActionListener(otro);
jbBotonV.addActionListener(otro);
jfMarco.setSize(500, 70);
jfMarco.setVisible(true);
jfMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main (String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Semana().ejecuta();
}
});
}
}
EscuchadorBoton.javapublic class EscuchadorBoton implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(((JButton)e.getSource()).getText());
}
} La ventana resultante:
sábado, 19 de febrero de 2011
Oremos
"Java nuestro que estas en las computadoras,
debugadas sean tus sentencias,
Venga a nosotros tu compilador,
Hágase tu software tanto en linux como en Windows
Danos hoy nuestro error de cada dia
...Y perdona nuestras aplicaciones en visual basic,
Como también nosotros perdonamos a los que programan en ActionScript
no nos dejes caer en tentación,
y líbranos del ”.net” "
debugadas sean tus sentencias,
Venga a nosotros tu compilador,
Hágase tu software tanto en linux como en Windows
Danos hoy nuestro error de cada dia
...Y perdona nuestras aplicaciones en visual basic,
Como también nosotros perdonamos a los que programan en ActionScript
no nos dejes caer en tentación,
y líbranos del ”.net” "
miércoles, 16 de febrero de 2011
Fin del bloque 1
Estos días he estado muy liado acabando el proyecto del bloque primero: una agenda electrónica. La verdad es que he dado toda la asignatura de programación avanzada en unas 6 horas (menos mal que me acordaba de algo). Al final me ha quedado una agenda capaz de jugar con objetos de diferentes tipos y guardar/cargar su información a través de ficheros de texto.
No sé si estará bien o mal, mejor o peor, pero lo que sé es que he aprendido y he quitado el polvo a mi cerebro.
System.out.prinln("Hasta la próxima entrada.");
No sé si estará bien o mal, mejor o peor, pero lo que sé es que he aprendido y he quitado el polvo a mi cerebro.
System.out.prinln("Hasta la próxima entrada.");
jueves, 10 de febrero de 2011
Pasar argumentos por linea de comandos
Para manejar los argumentos pasados por linea de comandos se hace uso de la cadena args[] del metodo main. Como en un ejercicio nos lo pedían, y no lo encontraba en los apuntes, lo busqué:
Me he dado cuenta que es un manejo de cadenas normal y corriente, pero me cuesta ver las evidencias cuando las tengo delante mia xD. Ahora hace falta saber como le digo a eclipse los parámetros de entrada al ejecutar el programa.....
class argumentos{ public static void main(String args[]){ if ( args.length == 0 ){ System.out.println("ERROR!"); return; } for ( int i = 0 ; i < args.length ; i++ ){ System.out.println(args[i]); } } }
Me he dado cuenta que es un manejo de cadenas normal y corriente, pero me cuesta ver las evidencias cuando las tengo delante mia xD. Ahora hace falta saber como le digo a eclipse los parámetros de entrada al ejecutar el programa.....
domingo, 6 de febrero de 2011
Inicio del curso
Este pasado viernes empezó el curso y somos once compañeros.Debo decir que hasta ahora lo único que conocía de código Java (si se puede considerar código) era que su logotipo es una tacita. Espero poder aprender mucho y tengo ganas de hacerlo.
Las clases se hacen muy amenas y entretenidas, y tienen mucho contenido. Aunque habrá que trabajarlo mucho en casa durante la semana, parece que la cosa pinta muy bien, como también pinta genial su entorno de desarrollo: eclipse.
Después de perder 5 minutos de mi tiempo de vida desarrollando una clase, resulta que el amigo eclipse lo hacía sólo con un par de clics. Seguro que me sigue sorprendiendo.
Ahora estamos empezando a desarrollar una agenda, os mantendré informados del proceso.
System.out.println("Saludos y hasta la próxima entrada");
Las clases se hacen muy amenas y entretenidas, y tienen mucho contenido. Aunque habrá que trabajarlo mucho en casa durante la semana, parece que la cosa pinta muy bien, como también pinta genial su entorno de desarrollo: eclipse.
Después de perder 5 minutos de mi tiempo de vida desarrollando una clase, resulta que el amigo eclipse lo hacía sólo con un par de clics. Seguro que me sigue sorprendiendo.
Ahora estamos empezando a desarrollar una agenda, os mantendré informados del proceso.
System.out.println("Saludos y hasta la próxima entrada");
Suscribirse a:
Entradas (Atom)