souci pour lancer des Thread simultanément
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:
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();
}
} |