Help meeee, Help meeeee my friends....

nataS22 Messages postés 66 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 28 février 2005 - 27 juil. 2004 à 17:45
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 - 28 juil. 2004 à 11:27
Salut,

Il se trouve que maintenant j'arrive à faire fonctionner ce bout de code à peu près correctement. En effet j'ai un problème à l'affichage. CAD que ma fenetre s'affiche en noir avec le titre et que ma barre de progression et mon JLable ne s'affiche qu'une fraction de seconde avant que mon thread ( si on peut l'appeler ainsi ) ne se ferme.

voici le code du thread :

---------------------------------------------------------------------------

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

public class BarreProgression extends JDialog implements Runnable {

private JLabel text = new JLabel ( "Veuillez patientez");
private JProgressBar progress = new JProgressBar(JProgressBar.HORIZONTAL);
private FrmPrincipale maFrame = null;
private Carte maCarte = null;

public BarreProgression (){
super ();

}

public BarreProgression ( FrmPrincipale uneFrame, Carte uneCarte, String unTitre ) {
super ( uneFrame, unTitre, false );

maFrame = uneFrame;
maCarte = uneCarte;

// pour la taille
setSize(300,100);
setResizable ( false );
setDefaultCloseOperation( 0 );

// pour centrer
setLocationRelativeTo(this.getParent());

init ();
}

public void init(){

// Met le max de la barre de défilement à 100%
progress.setMaximum (100);

// Valeur de départ 0
progress.setValue (0);

// Taille + couleur
progress.setBackground(Color.WHITE);
progress.setPreferredSize(new Dimension(100,5));

// Pour la police du texte
text.setFont(new Font("Helvetica",Font.ITALIC,17));

text.setForeground(Color.WHITE);

// Ajoute au panel
setBackground(new Color(10,10,10));

getContentPane().add(text,BorderLayout.CENTER);
getContentPane().add(progress,BorderLayout.SOUTH);

}

public void quit(){
hide();
}

public void run() {

show ();

int val=0;
while (val!=100){

val = maCarte.getVal();

this.setVal (val);

// System.out.println ( "valeur de val : " + val );

try {
Thread.sleep ( 100 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.println ( "Fin du run." );

quit();

}

public void setVal ( int val){
progress.setValue(val);
}
}

-------------------------------------------------------------------------------

J'ai déjà eu ce problème avec le JLabel de ma barre d'état et je pense que cela viendrait de mes fonctions de la classe Carte. Pourtant je créé toutes mes instance de classe avant de lancer mes méthode de communication avec la carte puisque celles ci semblent bloquantes.

Mais ca bloque quand meme.

Si ça interresse quelqu'un de se pencher sur le PB. moi ça fait déjà deux semaines que j'ai planté dessus.

Voici la méthode de la classe Carte dans laquelle j'ai fait mes test pour le thread. Celle ci n'est normalement pas bloquante. alors ??

-----------------------------------------------------------------------------------

/**
* Méthode d'initialisation des parametres d'une carte en fonction du fichier Config.cfg
*/
private void initParamCarte() {
String param = "";
String type = "";
String nom = "";

maBarre = new Thread ( new BarreProgression ( maFrame, this, "Initialisation " + this.ourIp ));
maBarre.start();

indexParamCarte = 0;

// Recherche les ligne du fichier config.sys afin de trouver celle qui commencent les données qui l'interresse.
// Lit le fichier de la premiere ligne jusqu'à la dernière.
for ( int i = 0 ; i < config.endOfFile() ; i++ ){
param = config.lireLigne ( i );

val = ( (int) ( ( ( double ) 100 / config.endOfFile() ) * ( i + 1 )));

// System.out.println ( "Valeur origine : " + config.endOfFile() + ", valeur de i : " + i );

// Si la ligne correspond à une ligne Type
if ( param.indexOf ( "Type" ) != -1 ){
type = param.substring ( param.indexOf ( ":" ) + 3, param.indexOf( ";" ) - 2 );
}
// Si la ligne correspond à une ligne Param et que Type à été trouvé aussi
else if ( param.indexOf ( "Param" ) != -1 && !type.equals( "" )){
nom = param.substring ( param.indexOf ( ":" ) + 3, param.indexOf( ";" ) - 2 );
// Création d'un parametre
paramCarte [ indexParamCarte++ ] = new Parametres ( nom, "", type );
}
}

// System.out.println ( "Parametres de la carte à l'adresse : " + ourIp + "\n" + toString());
}

-----------------------------------------------------------------------------------

Cette méthode va lire toutes les lignes dans un fichier Config.cfg pour savoir quels parametres configurer sur la carte.

Merci d'avance du coup de main.

@++
A voir également:

4 réponses

indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
27 juil. 2004 à 18:00
Slut,

il me semble que pour ce puisse marcher, il faudrait faire :

private Thread tempusFugit;

public BarreProgression (){
super ();
tempusFugit = new Thread(this);
tempusFugit.start();

}


Enfin, j'suis pas sûr
Voilà, en espérant que ça marche

[Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
28 juil. 2004 à 08:54
met un repaint apres le show (qui d'ailleur devrait etre remplace par setVisible(true); )
0
nataS22 Messages postés 66 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 28 février 2005
28 juil. 2004 à 10:21
Désolé mais ça ne fonctionne toujours pas dans les deux cas. De plus je ne sais pas si c une bonne idée de faire

private Thread tempusFugit;

public BarreProgression (){
super ();
tempusFugit = new Thread(this);
tempusFugit.start();

}

puisque je fais déjà :

Thread maBarre = null;

maBarre = new Thread ( new BarreProgression ( maFrame, this, "Initialisation " + this.ourIp ));
maBarre.start();

ce qui fqit que mon thread s'exécute deux fois.

Haaaaaaaaaaaaaaaaaaaaa, ça marchera jamaaaaaaaaaiiiiiiiiiiiiisssss..........

:sad) :sad) :sad)
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
28 juil. 2004 à 11:27
c'est bizarre, si le repaint marche pas ca veux dire que ton thread est bloqué .... Ton thread de carte n'est pas en temps reel par hasard?
0
Rejoignez-nous