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 :

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)
....
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
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) {}
 
	}
}
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 ?