Práctica 10 Mayo 23, 2008
Posted by beceoca in Posts normales.1 comment so far
La práctica trata sobre procesos e hilos.
En un principio se explica cómo funcionan los procesos abiertos en una CPU, ya que ésta dedica un tiempo a cada una de las tareas, dando la impresión de que está ejecutando todas a la vez.
La CPU intenta dar a todos los procesos el mismo tiempo.
Si la CPU tiene más procesos abiertos, dará menos tiempo a cada uno de ellos, y si un programa necesita más tiempo de dedicación por parte de la CPU del que ésta le proporciona se notará que comienza a ir lento o a trompicones.
El primer apartado de esta práctica es crear un programa que imprima un texto (DING!) cada vez que es pulsada la tecla INTRO
Necesitamos importar el paquete de excepciones java.io.IOException para posibles fallos de lectura del teclado
La clase tendrá como nombre Ding y contendrá únicamente el método main que a su vez contiene un try-catch para capturar el error lanzado por la aplicación en caso de fallo del teclado.
Dentro del try pondremos un while, que tendrá una condición (mientras sea cierto lo que contiene dentro del cuerpo), y dentro de éste un if cuya condición es que la lectura del teclado sea un intro, es decir: if(System.in.read() == ‘\n’)
Si esta condición se cumple imprimiremos en la consola el texto (DING!), en caso de algún error de teclado imprimiremos una línea de error.
La siguiente clase a programar fue la clase Dong que imprime por pantalla cada 1000ms mediante el métoodo sleep la frase “Dong!”. También se introduce en un try-catch para capturar cualquier error que pueda surgir.
El siguiente ejercicio trata de juntar las dos clases anteriores, es decir, que cuando pulsemos INTRO salga “Ding!” y cuando pasen 1000ms salte la frase “Dong”.
Aquí comenzamos a tener el problema de los hilos, en el cual si estás atendiendo a un evento no puedes atender a otro a la vez. Atendemos al evento de dormir la ejecución y no podemos atender al del botón INTRO. Con lo cuál los dos eventos se imprimen por pantalla justo cuando pasa el tiempo entre las dos impresiones de la frase “Dong!”. Por supuesto debemos declarar los dos posibles errores.
Después de realizar estos ejercicios sobre hilos nos dedicamos a nuestro juego que es el Brain Training. Teníamos un problema, que se trataba de que habíamos declarado un array pero no lo habíamos creado, y por eso nos daba un error al ejecutar del tipo NullPointerException. También estuvimos intentando resolver el problema del timer, ya que no sabemos cúando pararlo y si pulsamos un botón antes de que se pase el tiempo permitido para ello, la siguiente vez tendremos menos tiempo para contestar la pregunta.
Práctica 9 Mayo 8, 2008
Posted by beceoca in Posts normales.add a comment
Esta práctica es la primera que trata sobre interfaces gráficas (swing).
En los primeros 45 minutos, el profesor nos estuvo explicando cuándo y dónde debemos emplear las GUIs, ya que no siempre son necesarias.
Posteriormente nos metimos en “materia”, y comenzamos a realizar el ejercicio 1, que trata de crear un “hola mundo” de forma gráfica, creando una clase llamada HelloWorldGUI, en la que importamos varios paquetes necesarios para su posterior uso.
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
Creamos posteriormente un frame y le damos la función de salir en la X de la esquina superior derecha con las líneas de código:
JFrame frame = new JFrame(“HelloWorldGUI window title”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
y le añadimos un panel que contiene una etiqueta, en la que pone Hello World!.
JPanel contentPane = (JPanel) frame.getContentPane();
JLabel label = new JLabel(“Hello World!”);
contentPane.add(label);
Con estas otras dos líneas damos tamaño a la ventana y la hacemos visible por pantalla
frame.setSize(100,50);
frame.setVisible(true);
label.setOpaque(true);
label.setBackground(Color.BLUE);
Debemos hacer la etiqueta opaca, ya que por defecto es transparente y posteriormente cambiarla al color que deseemos.
Ahora se crea otra clase llamada HelloWorldGUIDelayed, a la que añadiremos un código dado en el enunciado entre la llamada al método setSize y a setVisible y cuya función es parar el programa 10 segundos antes de su ejecución, con lo que al ejecutar el programa deberemos esperar 10 segundos antes de que aparezca algo por pantalla.
try {
Thread.sleep(10*1000);
} catch (InterruptedException e) {
System.err.println(“Unexpected interruption while sleeping:”);
System.err.println(e);
System.exit(1);
}
En otro apartado se pide introducir el código System.exit(0); al final del método main, con resultado la salida directa del programa tras ejecutarlo.
Una vez mirado en el API los métodos a los que hace alusión el enunciado, nos pusimos “manos a la obra”.
El primer apartado “práctico” de este ejercicio nos pide realizar una clase llamada HelloWorldGUIDeaf que ignore el mensaje de cierre del manejador de ventanas, es decir, que cuando pulses la X de la esquina superior derecha no realice ninguna función. Esto se logra sustituyendo la anterior línea de código:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
por esta otra:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
De esta forma la única manera de cerrar la ventana es con ctrl+C
El apartado 3 no tiene mayor misterio que añadir la línea de código
frame.setUndecorated(true);
antes de hacer visible el frame, eliminándose la barra de título y los marcos de toda la ventana, siendo posible cerrarla únicamente mediante el comando ctrl+C
En el último apartado no conseguimos ningún cambio, aunque creemos que basta con incluir la línea de código
f
En el primer y segundo apartado nos piden crear una clase de nombre CompassSimple que sea igual que HelloWorldGUIColor pero que muestre la etiqueta en fondo negro, el texto blanco y la ventana maximizada al tamaño completo de la pantalla sin tener que apretar el botón para maximizarla. También debemos distribuir las etiquetas de esta manera:
Texto: “South“ color del fondo: blanco color del texto: negro
Texto: “East” color del fondo: azul color del texto: rojo
Texto: “West” color del fondo: rojo color del texto: azul
El código para esta clase es el siguiente:
import java.awt.*;
public static void main(String args[]) {
//Creamos la ventana, le damos título y utilidad a la X
JFrame frame = new JFrame(“HelloWorldGUI window title”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Creamos el panel y le añadimos a frame
JPanel contentPane = (JPanel) frame.getContentPane();
//Creamos las cuatro etiquetas con las características indicadas en el enunciado
JLabel label = new JLabel(“Hello World!”);
label.setOpaque(true);
label.setBackground(Color.BLACK);
label.setForeground(Color.white);
JLabel label1 = new JLabel(“Hello World!”);
label1.setOpaque(true);
label1.setBackground(Color.WHITE);
label1.setForeground(Color.black);
JLabel label2 = new JLabel(“Hello World!”);
label2.setOpaque(true);
label2.setBackground(Color.BLUE);
label2.setForeground(Color.red);
JLabel label3 = new JLabel(“Hello World!”);
label3.setOpaque(true);
label3.setBackground(Color.RED);
label3.setForeground(Color.blue);
//Damos bordes entre el panel y el contenedor principal, es decir, frame y añadimos todas las etiquetas en la posición del panel que les corresponde, maximizamos la pantalla al ejecutar el programa y la hacemos visible.
contentPane.setBorder(BorderFactory.createEmptyBorder(25,100,25,100));
frame.setLayout(new BorderLayout());
frame.getContentPane().add(label,BorderLayout.NORTH);
frame.getContentPane().add(label1,BorderLayout.SOUTH);
frame.getContentPane().add(label2,BorderLayout.EAST);
frame.getContentPane().add(label3,BorderLayout.WEST);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
}
No nos dio tiempo a realizar los demás apartados, ya intentaremos acabarla por nuestra cuenta y riesgo cuando tengamos algún rato libre, ya que el juego quita muchísimo tiempo.