Bonjour à tous ,
j'ai un soucis au niveau de mes threads pour mon bouton "rechercher".
Quand j'en lance deux en même temps , mes onglets s'ouvrent bien mais dans le premier rien ne s'affiche , seulement dans le dernier lancé.
Je vous ci-joint le code que j'utilise.Si vous pouvez me dire où ça pêche?

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
 
import javax.swing.Icon;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.plaf.IconUIResource;
 
public class Index extends JApplet implements ActionListener {
 
	static int idxproj = 4;//Index id_proj dans requete SQL	
	public Tableau pan0;
	public JPanel centre = new JPanel();
	public JLabel lab0;
	public Dimension dim0;//Taille fenetre	
	public static Menu mbar;//Menu applet	
	//static Chargement ch,ch1;//Barres de chargements	
	public boolean indic = true;//Indicateur couleurs on/off
	public Thread th;//thread applet
	private Thread[] ths;
	int checkThread;
	public Parametres[] param = new Parametres[100];
	public Jtab tabPan = new Jtab();	
	public JPanel chargement;
 
	/** {@docRoot} constructeur applet */
		public void init() {
 
			checkThread = 0;
			ths = new Thread[100];
			//Conteneur applet
	    	 BorderLayout orientation = new BorderLayout();
	    	 setLayout(orientation);
	    	//Menu + écouteurs 
	    	mbar = new Menu();
	    	mbar.imprim.addActionListener(this);
	    	mbar.export.addActionListener(this);
	    	mbar.rechercher.addActionListener(this);
	    	//param = new Parametres(mbar);	    	
	    		//mbar.caseACocher.addActionListener(this);
	    	//Configuration réseaux, identifiants, url
	    	Conf servConf = new Conf();
	    	//Chargement paremetres de sécurité
	    	System.setProperty("java.security.policy",servConf.servSec(Conf.actConf));
	    	System.setProperty("java.rmi.server.hostname",servConf.urlHote(Conf.actConf));
	    	System.setProperty("java.rmi.server.codebase",servConf.urlSec(Conf.actConf));
	    	//Mise en page applet
			lab0 = new JLabel("Tableau");
			dim0 = new Dimension(500,500);
			JPanel chargPan = new JPanel();
			add("North",mbar);
		    add("South",chargPan);		    
			add("Center",tabPan);
			setSize( 1200,800);
			this.show();
		}
 
		public void start(){
			System.out.println();
		}
 
		/** {@docRoot}Action sur écouteurs (imprimer,rechercher)*/
		public void actionPerformed(ActionEvent e) {
 
 
 
	    	 if(e.getActionCommand().equals("Rechercher")){
 
	    		//comboBoxChanged
	    		checkThread++;
	    		//Gestion de la fermeture des onglets
	    		int nbOnglet = tabPan.getComponentCount()+1;
	    		if(checkThread>=nbOnglet){	
	    		checkThread = nbOnglet-1;
	    		}
 
	    		new Thread(new Runnable() {	    			
	    			public void run() {	
 
			    		try {
 
			    			//Chargement du tableau			
							param[checkThread] = new Parametres(mbar);
			    			param[checkThread].setOnglet(checkThread);
			    			chargement = new JPanel();
			    			chargement.add(new JLabel("<html><font color ='red'>Chargement</font></html>"));
							tabPan.addTab("chargement en cours "+param[checkThread].getOnglet(),chargement);
			    			tabPan.setName("charg "+checkThread+" "+param[checkThread].getOnglet());
			    		    pan0 = new Tableau(param[checkThread]);
			    		    ths[checkThread] = new Thread(pan0);
							ths[checkThread].start();
							ths[checkThread].setName(param[checkThread].getTitre());
 
						synchronized (ths[checkThread]) {
							System.out.println(checkThread);
 
			    			   tabPan.setComponentAt(param[checkThread].getOnglet(),pan0);
			    			   tabPan.setTitleAt(param[checkThread].getOnglet(),param[checkThread].getTitre());
 
						}
 
		    			repaint();
 
			    		    }
 
			    		catch (Exception e1) {
							JOptionPane.showMessageDialog(null, "Tableau indisponible - Données insuffisantes.");
							e1.printStackTrace();
						}    				
 
	    			}	
 
	    		}).start();	 
 
 
	    	}
}