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:
et la console affiche:
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(); } } }
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: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.
ça donne cette erreur que j'arrive pas a analyser :
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); } }
j’espère avoir de l'aide.Exception in thread "main" java.lang.NullPointerException
at java.util.Timer.schedule(Timer.java:257)
at SemaphoreTest.main(SemaphoreTest.java:49)
Partager