04/11/2011, 08:22
|
| | Fecha de Ingreso: noviembre-2010
Mensajes: 8
Antigüedad: 14 años Puntos: 0 | |
Threads en Jframe Mi problema es poder hacer uso de threads dentro de una estructura JFframe q es llamada por un japplet. El objetivo de mi jframe es poder visualizar ondas fisicas dentro de un jpanel. De manera estatica he podido realizarlo teniendo mi jpanel como una clase interna del jframe.
El problema viene a la hora de realizar el dibujo de estas ecuaciones de forma "dinamica" y xa eso obvimente eso necesito threads tanto para dibujar de manera gradual como xa pausar o parar el dibujo.
Dejo parte del codigo del jframe, lo q considero importante:
public class IUEcuacion1 extends JFrame implements Runnable {
private boolean play1pulsado = false;
private boolean play2pulsado = false;
private boolean play3pulsado = false;
private Orbita o1,o2,o3; //objetos de clase q representan 3 ondas distintas de la misma ecuacion
//threads de las 3 posibles ondas que pintar en el jpanel
private Thread thO1 = null;
private Thread thO2 = null;
private Thread thO3 = null;
//variables globales que controlan el indice del vector solucion
public static int nPuntos1 = 0;
public static int nPuntos2 = 0;
public static int nPuntos3 = 0;
// arrays q devuelven conjunto de puntos(x,y) q representar en el jpanel xa cada onda
List<Punto> listaPuntos1 = new ArrayList<Punto>();
List<Punto> listaPuntos2 = new ArrayList<Punto>();
List<Punto> listaPuntos3 = new ArrayList<Punto>();
/** Creates new form IUEcuacion1 */
public IUEcuacion1() {
initComponents();
setLocationRelativeTo(null);
}
private void initComponents() {
....
areaResultados1 = new ZonaGrafica(); //crea jpanel sobre una clase interna extendida a jpanel
}
class ZonaGrafica extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graficar(g);
}
public void Graficar(Graphics ap){
....// Pinta ejes y lineas entre puntos
}
// metodo que al clicar en el boton START comienza la toma de valores y "comienza" cada hilo
private void play1_1MouseClicked(java.awt.event.MouseEvent evt) {
String botonText = null;
botonText = play1_1.getText();
if ("Play".equals(botonText)){
play1_1.setText("Pause");
if (!play1pulsado){
play1pulsado = true;
leerParametros(o1,1); //recoge parametros de jtextfield
listaPuntos1 = o1.getArrayPuntos(); // recoge puntos a dibujar en un array start(thO1); //creacion del hilo y llamada a start
}
else{
thO1.notify();
}
}
else if ("Pause".equals(botonText)){
play1_1.setText("Play");
thO1.suspend();
}
}
// Metodo run de la clase runnable
public void run() {
while (true) {
try{
Thread.sleep(100);
}catch (InterruptedException e) { }
// Pinta en cada onda si el boton de START ha sido pulsado y ademas si no estan vacios los arrays que guardan los puntos (x,y)
if ((play1pulsado) && (listaPuntos1.size()>nPuntos1)){
areaResultados1.repaint();
nPuntos1++;
}
if ((play2pulsado) && (listaPuntos1.size()>nPuntos2)){
areaResultados1.repaint();
nPuntos2++;
}
if ((play3pulsado) && (listaPuntos1.size()>nPuntos1)){
areaResultados1.repaint();
nPuntos3++;
}
}
}
// metodo start de cada hilo que le meto como parametro el hilo que toke, cualkiera de los 3 posibles que controlarian cada onda
public void start(Thread hilo){
if(hilo==null){
hilo=new Thread(hilo);
hilo.start();
}
}
Este codigo no llega a enlazar los metodos start() y run() y se queda sin hacer nada (salvo la toma de parametros y puntos en los array) justo tras salido de crear el hilo en el metodo start(thO1)
Gracias de antemano |