Foros del Web » Programación para mayores de 30 ;) » Java »

programa no finaliza timer

Estas en el tema de programa no finaliza timer en el foro de Java en Foros del Web. hola, tengo un programa que ejecuto por consola, y veo que no acaba nunca, y no consigo entender porque: Código: public class temporizador extends Thread{ ...
  #1 (permalink)  
Antiguo 29/03/2012, 03:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
programa no finaliza timer

hola, tengo un programa que ejecuto por consola, y veo que no acaba nunca, y no consigo entender porque:

Código:
	public class temporizador extends Thread{
	
		public long waitingSeconds;


		public temporizador( long WaitingSeconds){
			this.waitingSeconds = WaitingSeconds;
		}
		
		public void run(){
			
	        Timer timer = new Timer();		
	        timer.schedule(timerTask, waitingSeconds*1000);
	    }  
		
		TimerTask timerTask = new TimerTask(){

	   	public void run() {
	   		
	   		
	       	 try{

	                     	
	         	 System.out.println("temporizador");
email email = new email(new String[]{"[email protected]"},"temporizador","temporizador");
	    			email.start();

	       	 } catch (Exception e){
	       		 e.printStackTrace();
	       	 }

	        }
	       		
	    };

}
El problema tengo comprobado que está en el timer, pero según leo en:

http://docs.oracle.com/javase/1.3/do...til/Timer.html

Cita:
void schedule(TimerTask task, long delay)
Schedules the specified task for execution after the specified delay.

Así que no lo entiendo, debería ejecutar el código pasados 2 segundos y acabar.


He probado con "System.exit(0)" pero no me sirve puesto que mi clase email también extiende a Thread.


Gracias!
  #2 (permalink)  
Antiguo 29/03/2012, 04:11
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: programa no finaliza timer

He encontrado esto:

timer.cancel();

Que funciona, pero no lo entiendo...

¿Alguna idea de porque?

Gracias
  #3 (permalink)  
Antiguo 29/03/2012, 06:50
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 9 meses
Puntos: 10
Respuesta: programa no finaliza timer

Asi es el funcionamiento de la clase timer.

Yo la he usado algunas veces y siempre invoco a cancel al final del metodo run del timer.

Te dejo aqui una implementacion que realize hace poco de un Timer que necesitaba para mi aplicacion, espero te sirva.

Código PHP:
/*
 * Copyright (C) 2012 by Gonzalo Castillo
 * This software is provided under the GNU general public license (http://www.gnu.org/copyleft/gpl.html).
 */
package com.goncafa.proxy.util;

import java.util.TimerTask;

public class 
Timer {
    private 
java.util.Timer timer;
    private 
TimeoutListener timeoutListener;
    private 
boolean timeout;
    
    public 
Timer() {
        
super();
        
this.timeout false;
    }
    
    public 
Timer(Long millis) {
        
this();
        
this.schedule(millis);
    }
    
    public 
Timer(Long millisTimeoutListener timeOutListener) {
        
this(millis);
        
this.addTimeOutListener(timeOutListener);
    }
    
    public 
void addTimeOutListener(TimeoutListener timeOutListener) {
        if (
timeOutListener == null) {
            throw new 
NullPointerException();
        }
        
        
this.timeoutListener timeOutListener;
    }
    
    public 
void schedule(Long millis) {
        if (
this.timer != null) {
            
this.cancel();
            
this.timer null;
        }
        
        
this.timeout false;
        
        
this.timer = new java.util.Timer();
        
this.timer.schedule(new TimerTask() {
            @
Override
            
public void run() {
                
timeout();
            }
        }, 
millis);
    }
    
    private 
void timeout() {
        
this.cancel();
        
        
this.timeout true;
        
        if (
this.timeoutListener != null) {
            
this.timeoutListener.timeout();
        }
    }

    public 
void cancel() {
        
this.timer.cancel();
    }

    public 
boolean isTimeout() {
        return 
timeout;
    }
    
    public static 
void main(String[] args) {
        
Timer timer = new Timer();
        
timer.schedule(5000L);
        
        while (!
timer.isTimeout()) {
            try { 
Thread.sleep(1); } catch (Exception e) {}
        }
        
        
System.out.println("-- time-out --");
    }

Con esta clase en vez de usar directamente el timer de java.util debes usar este Timer.

La idea es encapsular la funcionalidad ya que el Timer de java.util tiene muchas mas opciones y yo solo necesitaba una de ellas.

La forma de usarla la peudes ver y probar y en su metodo main.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo

Etiquetas: clase, programa, string, time
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:31.