Bonjour,
J'ai un soucis avec un Thread qui execute une action toutes les n secondes. Au bout d'une heure j'ai une erreur StackOverflowError. Je vous met ci dessous l'erreur complete :
L'objet Clignote est le suivant :
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 Exception in thread "Thread-5" java.lang.StackOverflowError at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at sun.awt.SunToolkit.isInstanceOf(Unknown Source) at javax.swing.LookAndFeel.installProperty(Unknown Source) at javax.swing.plaf.basic.BasicLabelUI.installDefaults(Unknown Source) at javax.swing.plaf.basic.BasicLabelUI.installUI(Unknown Source) at javax.swing.JComponent.setUI(Unknown Source) at javax.swing.JLabel.setUI(Unknown Source) at javax.swing.JLabel.updateUI(Unknown Source) at javax.swing.table.DefaultTableCellRenderer.updateUI(Unknown Source) at javax.swing.JLabel.<init>(Unknown Source) at javax.swing.JLabel.<init>(Unknown Source) at javax.swing.table.DefaultTableCellRenderer.<init>(Unknown Source) at AlerteRenderer.<init>(Fenêtre.java:1668) at Clignote.run(Clignotement.java:38) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) at Clignote.run(Clignotement.java:44) ....
Je me demande si ça n'a pas un rapport au fait que le nombre de Thread soit limité par Java. En fait au début tout va bien, ça n'est qu'au bout d'un certains temps d'utilisation que l'erreur survient et je pense que c'est par ce que la fonction run se rappelle 36 fois mais comment faire cela proprement alors ?
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 class Clignote extends Thread implements Serializable { /** * */ private static final long serialVersionUID = 6461023223800616133L; public void run() { for(int i=0;i<AlerteRenderer.correspondancesAlertes.size();i++) { if(AlerteRenderer.correspondancesClign.get(i)==true) { if(AlerteRenderer.correspondancesAlertes.get(i)==Color.white) AlerteRenderer.correspondancesAlertes.set(i, AlerteRenderer.correspondancesEnre.get(i)); else AlerteRenderer.correspondancesAlertes.set(i, Color.white); } } PanEsp.ale.setDefaultRenderer(Object.class,new AlerteRenderer()); PanEsp.ale.repaint(); try { // pause Thread.sleep(1000); run(); } catch (InterruptedException ex) {} } }
Partager