Buenas tardes compañeros, después de mi última consulta de cual tuve mucha ayuda :D Tengo un problema surgido desde ahí y abro otra consulta como me dijeron :)
El problema que tengo ahora es que, al crear un hilo para la Cuenta Atrás de 5 segundos, necesito que, al llegar al segundo 0 o 1, se pare el hilo asi mismo o lo pare la clase principal.
El código es el siguiente:
Ejecutar = new JButton();
Ejecutar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
quitarAlways(false);
C = new Contador();
Hilo = new Thread(C);
Hilo.start();
}
});
Ejecutar.setText("Ejecutar");
Ejecutar.setBounds(20, 230, 96, 23);
contentPane.add(Ejecutar);
Esta es la clase donde tengo el contador, en el cual, tengo que conseguir que, al finalizar la cuentra atrás, se cierre el hilo y vuelva a estar la main en Alwaysontop
package AutoClick2;
import java.awt.Dimension;
@SuppressWarnings("serial")
public class Contador extends JFrame implements Runnable, ActionListener {
private boolean continuar = true;
int t=5;
private JLabel PosicioneElPuntero;
private JLabel c;
/**
* Launch the application.
*/
public static void main(String[] args) {
/*Contador c = new Contador();
Thread Hilo = new Thread(c);
Hilo.start();*/
}
/**
* Create the frame.
*/
public Contador() {
this.objs();
// Propiedades del JFrame
this.setTitle("Contador");
this.setLocation(new Point(580, 280));
this.setSize(new Dimension(209,110));
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.getContentPane().setLayout(null);
}
public void objs() {
c = new JLabel(""+t);
c.setBounds(100,11,60,20);
getContentPane().add(c);
PosicioneElPuntero = new JLabel("Posicione el puntero de su ratón");
PosicioneElPuntero.setBounds(10, 42, 191, 14);
getContentPane().add(PosicioneElPuntero);
}
public void detenElHilo() throws InterruptedException{
continuar=false;
dispose();
}
public void run (){
try {
while (continuar==true){
t-=1;
c.setText(""+t);
Thread.sleep(1000);
if (t==0){
detenElHilo();
}
}
}catch (Exception e){}
}
public void actionPerformed(ActionEvent arg0) {
}
}
Y aqui, es donde llamo desde el Hilo para ejecutar los timer.
public void Timer3() throws InterruptedException {
try {
timer2.start();
quitarAlways(true);
} finally {}
}
public void quitarAlways(boolean valor){
this.setAlwaysOnTop(valor);
}
El problema, es que después de acabar el Hilo de la cuenta atrás, no se pone la aplicación en Alwaysontop de nuevo como debería.
¿Que se os ocurre?
PD: He estado mirando para poder "destruir" el hilo y he encontrado información en este link: http://www.chuidiang.com/java/hilos/hilos_java.php No se si es información correcta, pero es lo que he encontrado, el problema aun parando el bucle, sigue siendo el mismo, si yo pongo desde el hilo a ejecutarse un metodo public que me ejecute un timer a la vez que ponga alwaysontop(true) de nuevo, no hace nada y no se el porqué...
PD 2: He estado mirando por la red de nuevo y bueno, el planteamiento que tenia no era del todo exacto, me explico, trataba de hacer que desde el hilo ejecutase una parte de la main de nuevo y tal...pero no es asi, ahora he hecho 2 hilos, uno para el main, para que no se "muera" y otro, para la cuenta atras. Lo que necesito ahora es saber como, cuando yo le dé al botón ejecutar, el hilo principal se quede a la espera con un wait(), y luego a través de un notify() se ponga en funcionamiento un timer de la clase principal, explico mejor: Cuando yo ejecuto el botón "Ejecutar" llamo a un JFrame que puse como Hilo y bien, éste hace una cuenta atrás de 5 segundos, cuando llegue a 0, necesito que la cuenta atrás se pare y, desaparezca esta ventana (esto ya lo consegui) y luego, ejecute un método que ponga Alwaysontop la aplicación principal de nuevo y, me ejecute un timer. Lo que pasa, que esto último no se como hacerlo. Es decir, no se como decirle a hilo (Cuando termine la cuenta atrás, ejecutes tal método de tu clase),