Thread et erreur StackOverflowError
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:
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:
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 ?