IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème de Thread et JProgressBar


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 72
    Points : 28
    Points
    28
    Par défaut Problème de Thread et JProgressBar
    BOnsoir,

    Désolé pour la récurrence du problème , j'ai trouvé pas mal de doc sur les ProgressBar donc la mienne est exactement comme je le souhaite quand je la lance dans l'EDT mais pas dans un nouveau thread, elle freeze le temps de mes calculs dans l'EDT . Bref, je vois vraiment pas ce qui cloche :

    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
    public static void ChargeFichier(){
    		//maliste2.clear();
    		//Progression prgs= new Progression();
    		//prgs.go();
    		final JFileChooser chooser = new JFileChooser();
    		chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    		chooser.setMultiSelectionEnabled(true);
    		final int valRetour = chooser.showOpenDialog(null);
            new Thread() {
                public void run() {
     
                    System.out.println("Debut du traitement dans le thread : "
                            + Thread.currentThread().getName());
                 	new JProgress2();
                    System.out.println("Fin du traitement dans le thread : "
                            + Thread.currentThread().getName());
     
                    // On utilise invokeLater pour exécuter du code dans l'EDT :
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
     
                    		if(valRetour == JFileChooser.APPROVE_OPTION){
                    			File  fs = chooser.getSelectedFile();
                    			File [] fichiers = fs.listFiles();
     
                    			nom_fich = fichiers[0].getAbsolutePath().replaceAll(fichiers[0].getAbsolutePath().split("\\\\")[fichiers[0].getAbsolutePath().split("\\\\").length-1], "");
                    			nom_fich2 = nom_fich.replaceAll(nom_fich.split("\\\\")[nom_fich.split("\\\\").length-1],"");
                    			nom_fich2 = nom_fich2.replaceAll("\\\\\\\\", "\\\\");
                    			//	System.out.println(nom_fich);
                    			//	System.out.println(nom_fich2);
                    			for(int i=0;i<fichiers.length;i++){
                    				//Progression.augmentation = i;
                    				String s = fichiers[i].getAbsolutePath();
                    				//System.out.println(s);
                    				analyse_fichier(s);
                    			}
                    		}
                    		Log.init();
                    		create_dir();
                    		try
                    		{
                    			String adresse = System.getProperty("user.dir") + "/" + "path.txt";
                    			File f = new File(System.getProperty("user.dir") + "/" + "path.txt");
                    			if(!f.exists()){
                    				FileWriter fw = new FileWriter(adresse, true);		
                    				BufferedWriter output = new BufferedWriter(fw);
                    				output.write(nom_fich);
                    				output.flush();
                    				output.close();
                    			}
                    		}
                    		catch(IOException ioe){
                    			System.out.print("Erreur : ");
                    			ioe.printStackTrace();
                    		}
                             System.out.println("Fin du traitement dans invokeLater : " + Thread.currentThread().getName());
                            // On restaure l'état de notre interface
                        }
                    });
     
                }
            }.start();
     
    		//Progression.cadre.dispose();
    	}

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    C'est qui bloque ? Si oui, on peut voir le code ?

  3. #3
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    Je ne sais pas si je me trompe, mais pour moi

    SwingUtilities.invokeLater(new Runnable());

    Ca s'utilise uniquement pour tout ce qui est manipulation des elements de l'interface et non du "code de calcul ou de manipulation de fichier". Donc a l'interieur du thread de calcul.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Ca s'utilise uniquement pour tout ce qui est manipulation des elements de l'interface
    En général, le but est de ne pas bloquer l'IHM pendant des traitements longs. Donc il est préférable de faire le minimum de traitements dans l'EDT (l'idéal étant, comme tu le dis, de ne faire que de l'affichage).
    Mais bon, tant qu'on sait pas réellement ce qui bloque dans son cas, c'est difficile d'aller plus loin...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 72
    Points : 28
    Points
    28
    Par défaut
    Désolé du retard, j'ai été pris par la rédaction du rapport de stage ^^

    Du coup oui, j'ai un traitement qui est fait à la suite et non en même temps.

    Dans un premier temps ma JProgressBar se lance à moitier et termine de faire ce qu'elle était censé faire à la fin du traitement.

Discussions similaires

  1. [JProgressBar]Problème de thread
    Par benlaug dans le forum EDT/SwingWorker
    Réponses: 3
    Dernier message: 20/09/2008, 18h21
  2. [Problème] Threads et JProgressBar
    Par Bloodscalp dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 10/10/2006, 15h19
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo