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

avec Java Discussion :

Aide pour les barres de progression


Sujet :

avec Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut Aide pour les barres de progression
    Salut tout le monde,

    Je souhaite créer une barre de progression qui indique le temps d'exécution pour la création d'un fichier!!
    Je vous explique :

    A partir d'un code java, j'exécute un programme C++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] command = new String[] {"C:\\mzWiff\\Debug\\mzWiff.exe", "--mzXML", "-v", "C:\\Directory\\" + wiffFile.getName()};		
    Process pr = Runtime.getRuntime().exec(command);
    Il s'exécute bien, mais en fait un fichier est créé et il met du temps! Donc, je voudrais générer une barre de progression qui permettrais de faire patienter l'utilisateur en lui disant combien de temps il doit attendre!
    J'ai trouvé plein d'exemple de creation de barres, mais aucune ne dit comment faire une barre de progression de l'exécution de processus!!

    Quelqu'un a une idée??

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, je ne vois pas comment le programme java pourrait connaître l'avancement d'un autre processus. Ce que tu veux faire est impossible, ça devrait être à ton programme C++ de gérer cette barre de progression.

    Ou sinon, si tu peux savoir à l'avance la taille du fichier à générer, et avoir le rapport taille/temps de création, tu peux faire une barre de progression qui sera approximative.

  3. #3
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    au pire tu fais une barre de progression infinie et pour montrer l'avancement du indique régulièrement la taille du fichier créé ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    Citation Envoyé par in Voir le message
    au pire tu fais une barre de progression infinie et pour montrer l'avancement du indique régulièrement la taille du fichier créé ...
    ok, ça a l'air d'être une bonne idée, et comment je fais ça?

  5. #5
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par linalin Voir le message
    ok, ça a l'air d'être une bonne idée, et comment je fais ça?
    Pour la progression infinie c'est une "option" de la classe JProgressBar. Comme c'est bientôt le weekend :

    Citation Envoyé par javadoc
    setIndeterminate(boolean newValue)
    Sets the indeterminate property of the progress bar, which determines whether the progress bar is in determinate or indeterminate mode.
    Pour contrôler la taille du fichier régulièrement, ben là à toi de voir. A priori, tu dois lancer ton traitement dans un thread. Tu peux donc avoir un autre thread qui de temps en temps récupère la taille du fichier et l'affiche ...

    Par contre, il faut que tu connaisse l'emplacement ce ce fichier et son nom ... là ça dépend de ton prog ...

    Mais bon ce n'est peut être pas possible dans ton cas. Le tout est de trouver la manière la plus sympa de montrer à l'utilisateur qu'on est pas planté et que le traitement avance ...

    [EDIT] Tu devrais lire ce tuto. tu as les objets ProgressMonitor et ProgressMonitorInputStream qui pourrait être utilisables dans ton cas ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    En fait, quand j'exécute mon fichier, le cours de l'exécution s'affiche dans la sortie standard de java!!
    or je voudrais afficher ça ds une nouvelle fenetre, est ce que tu sais comment je pourrais faire?

  7. #7
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par in Voir le message
    A priori, tu dois lancer ton traitement dans un thread. Tu peux donc avoir un autre thread qui de temps en temps récupère la taille du fichier et l'affiche ...
    .
    C'est toujours possible ça ? je m'explique : le programme C++ a un accès en écriture (au moins ! ) à ce fichier, pour que le thread java puisse connaître la taille du fichier, il lui faut (il me semble hein) un accès en lecture, or je crois que tous les OS ne permettent pas ça.
    Merci de m'éclairer


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    bon, en fait, selon mon maitre de stage, c'est possible!!

    Quand j'exécute mon programme C++, J'ai ça qui s'affiche dans mon invite de commandes :

    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
    Started: Mon May 05 11:19:56 2008
     
    INFO: Analyst Version 1.4.1 is installed.
    INFO: C:\Directory\PC12_diff.wiff is created with Analyst 1.4.1
    INFO: 1 sample(s) recorded.
    INFO: Sample#1(inject)
    Started: Sample#1: Mon May 05 11:19:56 2008
     
    INFO: Found Manufacturer tag "AB Sciex Instruments" in file.
    INFO: Found Model tag "QTrap" in file.
    INFO: Found Serial Number tag "M0040105PT" in file.
    INFO: Found Hardware Version tag "M401402 B4T0301 M3L1412 B3T0300" in file.
    INFO:    Period#0, has 1 experiment(s) recorded.
    INFO:       Experiment#0: Scan(Precursor Scan/+), 5522/5969
    INFO: Allocated 5522 scan slot(s) via full sweep.
    (got computer name: MEDTECH1862)
    Calculating sha1-sum of C:\Directory\PC12_diff.wiff
    --done (sha1):1241bfadcca24c18f4a0b9c8ed5abd4e1dbedb79
    .........100/5522
    .........200/5522
    .........300/5522
    .........400/5522
    .........500/5522
    .........600/5522
    .........700/5522
    .........800/5522
    .........900/5522
    .........1000/5522
    .........1100/5522
    .........1200/5522
    .........1300/5522
    .........1400/5522
    .........1500/5522
    .........1600/5522
    .........1700/5522
    .........1800/5522
    .........1900/5522
    .........2000/5522
    .........2100/5522
    .........2200/5522
    .........2300/5522
    .........2400/5522
    .........2500/5522
    .........2600/5522
    .........2700/5522
    .........2800/5522
    .........2900/5522
    .........3000/5522
    .........3100/5522
    .........3200/5522
    .........3300/5522
    .........3400/5522
    .........3500/5522
    .........3600/5522
    .........3700/5522
    .........3800/5522
    .........3900/5522
    .........4000/5522
    .........4100/5522
    .........4200/5522
    .........4300/5522
    .........4400/5522
    .........4500/5522
    .........4600/5522
    .........4700/5522
    .........4800/5522
    .........4900/5522
    .........5000/5522
    .........5100/5522
    .........5200/5522
    .........5300/5522
    .........5400/5522
    .........5500/5522
    ..Calculating sha1-sum of mzXML
    --done (mzXML sha1):f990f5ebbb1fdc3a27617bb9b9866ea0b5d5a3d7
    Ended: Sample#1: Mon May 05 11:20:17 2008
     
    Elapsed: Sample#1: 21 sec 
    Ended: Mon May 05 11:20:17 2008
     
    Elapsed: 21 sec
    donc, maitenant, lorsque j'exécute le même code à partir de mon interface java, j'arrive à faire afficher ça sur la console de java...

    Vu que j'arrive par cet affichage, à obtenir l'avancement de l'analyse, est il possible que j'integre cet avancement dans une barre de progression en java et comment?

  9. #9
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par afrikha Voir le message
    C'est toujours possible ça ? je m'explique : le programme C++ a un accès en écriture (au moins ! ) à ce fichier, pour que le thread java puisse connaître la taille du fichier, il lui faut (il me semble hein) un accès en lecture, or je crois que tous les OS ne permettent pas ça.
    Merci de m'éclairer
    en fait je pense que j'ai répondu un peu vite. Je ne sais pas si c'est possible, et encore moins si ça marche sur tout les OS ... En fait c'était surtout pour donner une idée qui permettrait de visualiser une forme de progression ... solution à proscrire donc ...

    Citation Envoyé par linalin
    Vu que j'arrive par cet affichage, à obtenir l'avancement de l'analyse, est il possible que j'integre cet avancement dans une barre de progression en java et comment?
    Là à part analyser la sortie pour récupérer les
    .........100/5522
    Je ne vois pas trop.

    Par contre s'il est possible de modifier le programme C++, peut être que tu peux lui faire afficher des chaines plus facilement exploitables par le programme Java ... ?

    Par contre il va falloir avoir une sorte d'écouteur sur la sortie pour qu'à chaque nouvelle ligne, ça mette à jour la barre de progression ...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    ok, et comment je pourrais récupérer le nombre par 5522 et 100?

  11. #11
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par linalin Voir le message
    ok, et comment je pourrais récupérer le nombre par 5522 et 100?
    Je ne sais pas si c'est la bonne solution mais tu peux récupérer les flux de sortie du Process et analyser les chaines de caractères produites.

    Tu peux lire cet article d'adiGuba qui devrait te donner une idée de comment récupérer les flux de sortie de ton programme C++.

    Après en fonction de ce que tu lis tu mets à jour ta barre.

    tu peux aussi modifier ton C++ pour qu'il produise quelque chose de facile à interpréter style

    ...
    total 5522
    100
    200
    ...
    end
    tu initialises ta barre en lisant une ligne commençant par total
    et tant que tu lis des nombres tu mets à jour la barre ...

    Mais bon ce n'est qu'une proposition ...

    [EDIT] la FAQ pourrait également t'être bien utile ...

Discussions similaires

  1. [WinForms]où trouver des bitmaps pour les barres d'outils ?
    Par hucliez dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 30/09/2006, 17h10
  2. [Conception] Aide pour les liaison entre 2 table
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 02/09/2006, 13h03
  3. Besoin d'aide pour les dates
    Par Aurore_atmo dans le forum MATLAB
    Réponses: 6
    Dernier message: 03/07/2006, 15h37
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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