Cómo reanudar un hilo

Estoy usando tres subprocesos en mi código. Cuando presiono el botón 'detener', debería detenerse y el botón 'iniciar' debería reanudarlos ... aquí está mi código:

 private void jButton_stopActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    boolean result = value;
    if(result){
        t.stop();
        timer.stop();
        timer2.stop();
        value = false;
        jButton_stop.setText("Start");
    }
    else{
        t.resume();
        timer.resume();
        timer2.resume();
        value = true;
        jButton_stop.setText("Stop");
    }

Pero cuando hago clic en el botón 'detener', todos los hilos se detienen perfectamente, pero cuando presiono el botón 'iniciar', los hilos no se reanudan. ¿Por qué? por favor, ayúdame.

preguntado el 10 de septiembre de 13 a las 01:09

¿A qué te refieres con "hilo"? No veo ningún código de subproceso allí. ¿Te refieres en cambio a un temporizador de oscilación? Supongo que nunca llamarías stop() y resume() en un Hilo. -

thread.stop() y resume() están en desuso y no deben utilizarse. Deberías considerar tener el hilo wait() en una cerradura Object y entonces notify() para que siga funcionando. -

¿Dónde está la definición de timer y timer2? -

el dual de Thread#resume() is Thread#suspend()no, Thread#stop(). Pero también lea el Javadoc para Thread#suspend(), ya que será casi imposible hacer que esto funcione sin un punto muerto en un programa que no esté libre de bloqueos. Si publicas el código del run() método que utiliza el subproceso, estoy seguro de que la gente puede sugerir una posible reestructuración para que las cosas funcionen con sensatez. -

2 Respuestas

Considerando t es una instancia de Thread:

Nunca es legal iniciar un hilo más de una vez. En particular, un subproceso no puede reiniciarse una vez que ha completado la ejecución.

de http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

Y, Thread.stop() es obsoleto.

El subproceso mismo debe comprobar si necesita terminar, como un boolean run variable que se está comprobando, o usando objetos para la comunicación de subprocesos.

Respondido el 10 de Septiembre de 13 a las 01:09

Puede mantenerlo en espera en función de algún valor booleano, por ejemplo:

 public void run() {
      try {
      for(int i = 15; i > 0; i--) {
         System.out.println(name + ": " + i);
         Thread.sleep(200);
         synchronized(this) {
            while(suspendFlag) {
               wait();
            }
          }
        }
      } catch (InterruptedException e) {
         System.out.println(name + " interrupted.");
      }
      System.out.println(name + " exiting.");
   }

Aquí puede cambiar el estado de suspendFlag fuera del hilo. ver aquí

Respondido el 10 de Septiembre de 13 a las 01:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.