Hola,
Cita:
Iniciado por sivadmp hola Gonzalo tienes que utilizar Thread o la Interfaz Runnable para crear graficas en tiempo real
...
Técnicamente es mucho mas complejo que simplemente un Thread, recuerda que un Thread cualquiera no puede accesar ninguna función de AWT, porque este último no es multithreading, solamente el EventDispatchThread debe accesar los métodos de AWT.
Código Java:
Ver original public void run() {
public void run() {
actualizarGrafica();
}
}, "Performer");
performer.start();
}
Dependiendo de lo que esté dentro de actualizarGrafica, da lo mismo que hacerlo sin un Thread independiente, puesto que invokeLater usa el hilo de EventDispatchThread para ejecutar el contenido del método run, aunque lo haga hasta que tenga tiempo. En otras palabras si en actualizarGrafica hay un ciclo infinito que pinta la imagen conforme se va generando, esta va a bloquear completamente la aplicación para siempre o va a ralentizar la aplicación demasiado tiempo.
Código Java:
Ver originalpublic void actualizarGraphica() {
while(true) {
.. calcSomething ...
.. drawSomething ...
// thread consuming all slices of time events
// of the EventDispatchThread
}
}
La forma de hacer un aplicación que pinta imágenes y realiza cálculos al mismo tiempo es a través de eventos (Listeners), un hilo hace los cálculos y cuando esté ya tiene parte del resultado genera un evento (fireEvent...) y otro hilo, el EventDispatchThread, está escuchando o esperando por los eventos (addEventListener), porque solamente este debe pintar en la ventana. De esta forma se mantiene la aplicación responsiva a los eventos, se pueden presionar botones y sigue funcionando todo correctamente.
Saludos,