IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

RemindTask ne veut pas s'exécuter


Sujet :

Langage Java

  1. #1
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut RemindTask ne veut pas s'exécuter
    Salut,

    J'utilise TimeReminder pour répéter un processus plusieurs fois pour une date de début précise. Il est implementé avec Sémaphore et qvec une exécution simple sans avoir le temps en boucle ça marche bien! c'est le code de la simple exécution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class simpleTest {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		for (int i = 1; i < 5; i++) {
    			Processor processor = new Processor("THREAD-" + i);
    			new Thread(processor).start();
    		}
     
    	}
     
    }
    et la console affiche:

    12:43:39 Complex processing started for THREAD-2.
    12:43:39 Complex processing started for THREAD-4.
    12:43:39 Complex processing started for THREAD-3.
    12:43:40 Processing completed by THREAD-4.
    12:43:40 Complex processing started for THREAD-1.
    12:43:40 Processing completed by THREAD-2.
    12:43:41 Processing completed by THREAD-3.
    12:43:44 Processing completed by THREAD-1.
    Fondamentalement, il permet seulement 3 threads à exécuter en même temps, et la je boucle pour 5 threads. Il fonctionne bien mais avec la TimeReminder, quand je veux ajouter une nouvelle date et l'intervalle simple, avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
     
    public class SemaphoreTest {
     
    	// static Date now = new Date();
    	public static Date endDate;
    	public static Date startDate;
    	public static int numEquipment = 10;
     
    	DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    	{
    		try {
    			startDate = dateFormat.parse("05/26/2011 11:10:12");
    			endDate = dateFormat.parse("05/28/2011 12:10:12");
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    	}
     
    	static class RemindTask extends TimerTask {
     
    		// init endDate (schedule)
    		@Override
    		public void run() {
    			if (SemaphoreTest.endDate.after(new Date())) {
    				for (int i = 1; i < numEquipment; i++) {
    					Processor processor = new Processor("THREAD-" + i);
    					new Thread(processor).start();
    				}
    			} else {
    				System.exit(0);
    			}
    		}
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		Timer timer;
    		timer = new Timer();
    		timer.schedule(new RemindTask(), SemaphoreTest.startDate, 20 * 1000);
     
    	}
     
    }
    ça donne cette erreur que j'arrive pas a analyser :

    Exception in thread "main" java.lang.NullPointerException
    at java.util.Timer.schedule(Timer.java:257)
    at SemaphoreTest.main(SemaphoreTest.java:49)
    j’espère avoir de l'aide.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    C'est simple, SemaphoreTest.startDate n'est pas instanciée, donc vaut null, ce qui fait que la méthode plante en NullPointerException.

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    C'est plutôt SemphoreTest qui n'est pas instancié.

    A mon avis tu voulais que le bloc anonyme (après la déclaration de dateFormat) soit static. Il faut donc rajouter "static" devant

  4. #4
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par Nemek Voir le message
    C'est plutôt SemphoreTest qui n'est pas instancié.
    C'est la classe, elle est bien instanciée
    Mais effectivement, à la relecture je vois que le bout de code a du bien être déclaré en étant pensé comme static.

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 6 887
    Points
    6 887
    Par défaut
    C'est Class<SemphoreTest> qui est instancié
    SemaphoreTest.startDate n'est pas initialisé ou n'a pas reçu d'affectation.

  6. #6
    Membre régulier Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 84
    Points
    84
    Par défaut
    Merci pour vos réponses, J'ai déplacé les dates dans le RemindTask et ça marche très bien =)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Une requête SQL ne veut pas s'exécuter
    Par Francky44003 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/11/2012, 12h55
  2. [DBMS_SCHEDULER] Job qui ne veut pas s'exécuter.
    Par hellmaster78 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 01/08/2011, 17h59
  3. Réponses: 2
    Dernier message: 25/08/2010, 18h50
  4. Projet Exporté en JAR ne veut pas s'exécuter
    Par jacko2 dans le forum Général Java
    Réponses: 16
    Dernier message: 30/04/2008, 22h39
  5. Serveur DNS ne veut pas s'exécuter
    Par webrider dans le forum Réseau
    Réponses: 12
    Dernier message: 04/09/2007, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo