Java - Threads y Ventanas

 
Vista:

Threads y Ventanas

Publicado por Juande (2 intervenciones) el 15/03/2005 12:29:33
No me acabo de aclarar con los threads, con los notify(), wait() ni suspend()...

Resulta que tengo una ventana que al pulsar un boton llama a una funcion que me crea otra ventana ( de otra clase que implementa Runnable ).

La funcion de la clase original es esta :

public void nuevo() {

if( area.getText().length() > 1 ) {
VentConfirmacion vc = new VentConfirmacion("Existe un documento abierto",
"Desea guardar los canvios del actual documento ?");
Thread confirma = new Thread(vc);
confirma.start();
while(confirma.isAlive()) {
//System.out.println("v");
}
System.out.println("Devuelve control");
if( vc.respuesta() == 1) {
try {
guardaFitxer();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

Aqui me creo la nueva ventana y la asocio a un Thread al q le hago start(). Lo que quiero es que no seguir con la ejecucion de esta funcion hasta que la nueva clase VentConfirmacion no haya pasado por el actionPerformed ( el usuario haya elegido [si|no|cancelar]. Aqui esta la clase en cuestion:

public class VentConfirmacion extends JFrame implements ActionListener,Runnable{

private Thread devolver_respuesta = new Thread(this);
int respuesta = -1; // 0=Cancelar , 1=Si, 2=No
boolean sehaescogido = false;

public VentConfirmacion(String titulo,String texto) {


setTitle(titulo);
JLabel label = new JLabel(texto);
JButton bsi = new JButton("Si");
JButton bno = new JButton("No");
JButton bcan = new JButton("Cancelar");
getContentPane().add(label,BorderLayout.NORTH);
Panel panel = new Panel();
panel.setLayout(new FlowLayout());
panel.add(bsi);
panel.add(bno);
panel.add(bcan);
getContentPane().add(panel,BorderLayout.SOUTH);

bsi.addActionListener(this);
bno.addActionListener(this);
bcan.addActionListener(this);

pack();
setVisible(true);

}

public void actionPerformed(ActionEvent e) {
System.out.println("Entro en actionPerformed");
Object obj = e.getSource();
if(obj instanceof JButton) {
JButton jb = (JButton)obj;
if(jb.getLabel() == "Si") {
respuesta = 1;
cierra();
}
if(jb.getLabel() == "No") {
respuesta = 2;
cierra();
}
if(jb.getLabel() == "Cancelar") {
respuesta = 0;
cierra();
}
sehaescogido=true;
devolver_respuesta.notify();
}
}

public void cierra() {
setVisible(false);
}

public int respuesta() {
return respuesta;
}

public void run() {
System.out.println("Entro en run");
if(!sehaescogido) {
try {
devolver_respuesta.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Salgo en run");
}
}

Como lo tengo q hacer ??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 755
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

RE:Threads y Ventanas

Publicado por Yamil Bracho (2315 intervenciones) el 15/03/2005 21:12:44
Creo que te estas complicando la vida. Puedes hacer que el dialogo de confirmacion sea modal y asi debes cerrarlo antes de continuar con la ejecucion del programa...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar