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

SWT/JFace Java Discussion :

ProgressBar sous MAC OSX


Sujet :

SWT/JFace Java

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut ProgressBar sous MAC OSX
    Bonjour,

    J'effectue un développement sous Mac Lion et Windows. Mon problème se trouve dans la gestion graphique du Mac de ma barre de progression.

    Dans ma méthode, je lance une ProgressBar indeterminate , et puis je lance un thread qui exécute sa partie de code de son coté.

    Le thread en prenant fin, ferme la boucle du Shell et celui-ci donc.
    Cela marche très bien sous windows, celui-ci gérant le multi-threading graphique.

    Sous mac, la barre de progression ne prend pas le focus et lorsque l'exécution de mon thread est terminée, la barre continue jusqu'à ce que je clique sur mon shell de barre de progression.
    Et si je met le focus sur la barre de progression , celui ci attend un évènement graphique pour disparaitre.

    N'étant pas un spécialiste du Mac, quelqu'un pourrait-il m'aider?
    Merci d'avance

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Plutôt que d'essayer de gérer toi même une boite de dialogue qui affiche une barre de progression (ce que je devine?), pourquoi ne pas utiliser une déjà faite?
    Avec JFace, tu peux utiliser une ProgressMonitorDialog. Petit exemple d'implémentation:
    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
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());
    final Button button = new Button(shell, SWT.PUSH);
    button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
    button.setText("Launch");
    button.addSelectionListener(new SelectionAdapter() {
      /**
       * {@inheritDoc}
       */
      @Override
      public void widgetSelected(final SelectionEvent anEvent) {
        final IRunnableWithProgress runnable = new IRunnableWithProgress() {
     
          @Override
          public void run(final IProgressMonitor monitor)
              throws InvocationTargetException, InterruptedException {
            monitor.beginTask("Long treatment...", IProgressMonitor.UNKNOWN);
            monitor.subTask("Performing the long treatment...");
            Thread.sleep(2000);
            monitor.done();
            display.asyncExec(new Runnable() {
              @Override
              public void run() {
                if (shell != null && !shell.isDisposed()) {
                  shell.dispose();
                }
              }
            });
          }
        };
        try {
          new ProgressMonitorDialog(shell).run(true, false, runnable);
        } catch (final InvocationTargetException iException) {
          iException.printStackTrace();
        } catch (final InterruptedException iException) {
          iException.printStackTrace();
        }
      }
    });
     
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
    Je n'ai pas testé sous Mac, mais je pense que ça devrait aider pour ton problème...

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Pour expliquer plus en détail, ce n'est pas une boite de dialogue, juste un repère visuel pour informer l'utilisateur qu'il y a un traitement en cours et qu'il doit vérifier son lecteur de carte.
    donc c'est juste un shell, comportant une Progressbar inderterminate, qui se termine quand le thread est terminé.

    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
     
    GridLayout layout = new GridLayout(1, false);
    		Shell shellt = new Shell(Display.getDefault(), SWT.TITLE);
    		shellt.setLayout(layout);
    		Composite toto = new Composite(shellt, SWT.CENTER);
    		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
     
    		toto.setLayoutData(gridData);
    ProgressBar bar = new ProgressBar(toto, SWT.INDETERMINATE | SWT.ON_TOP);
    		bar.setSize(200, 32);
    		shellt.setBackground(color);
    		shellt.setSize(210, 80);
    		centrerSurEcran(shellt);
    		shellt.open();
     
     
    		progressBar dfsd = new progressBar(param, action);
    		dfsd.start();
     
     
    		while (!shellt.isDisposed() && dfsd.isAlive()) {
     
    			if (!Display.getDefault().readAndDispatch())
    				Display.getDefault().sleep();
    		}
     
    		shellt.dispose();
    et donc ne connaissant pas Jface, je ne suis pas sur de ta réponse et le besoin de l'objet proposé.
    cdt

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut Résolu
    Effectivement, cela à résolu mon problème , même si le coté graphique est moins beau, mais merci

  5. #5
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Je peux pas tester sous Mac, mais est-ce que tu obtiens quelque chose de fonctionnel avec ce code:
    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
    public static void main(final String[] args) {
      final Display display = new Display();
      final Shell shell = new Shell(display);
      shell.setLayout(new GridLayout(1, false));
     
      final Composite composite = new Composite(shell, SWT.NONE);
      composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
      composite.setLayout(new GridLayout(1, false));
     
      final ProgressBar bar = new ProgressBar(composite, SWT.ON_TOP | SWT.SMOOTH);
      bar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
      bar.setSize(200, 32);
      final int maximum = bar.getMaximum();
      new Thread(new Runnable() {
        @Override
        public void run() {
          for (final int[] i = new int[1]; i[0] < maximum; i[0]++) {
            try {
              Thread.sleep(100);
            } catch (final Throwable th) {
            }
            if (display.isDisposed())
              return;
            display.asyncExec(new Runnable() {
              @Override
              public void run() {
                if (bar.isDisposed())
                  return;
                bar.setSelection(i[0]);
              }
            });
            if (i[0] == (maximum - 1)) {
              display.asyncExec(new Runnable() {
                @Override
                public void run() {
                  if (bar.isDisposed()) {
                    return;
                  }
                  bar.setSelection(maximum);
                }
              });
              try {
                Thread.sleep(1000);
              } catch (final Throwable th) {
              }
              display.asyncExec(new Runnable() {
                @Override
                public void run() {
                  final Shell activeShell = display.getActiveShell();
                  if (activeShell != null && !activeShell.isDisposed()) {
                    activeShell.close();
                  }
                }
              });
            }
          }
        }
      }).start();
     
      shell.setText("Progress test");
      shell.pack();
      shell.open();
      while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
          display.sleep();
      }
      display.dispose();
    }
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    merci de me proposer un autre code, mais le souci esthétique finalement ne prend pas le devant sur un souci de temps.

    J'essaierai ta solution un peu plus tard

    merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Netbeans sous Mac OSX
    Par brotelle dans le forum NetBeans
    Réponses: 7
    Dernier message: 20/06/2008, 16h48
  2. Coder en C sous Mac OsX
    Par Spanish_Flu dans le forum Choisir un environnement de développement
    Réponses: 7
    Dernier message: 05/12/2006, 23h39
  3. editeur php sous mac OSX
    Par shadowR dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 01/03/2006, 16h57
  4. [swig] utilisation de ld sous mac osX tiger.
    Par PyBio dans le forum Interfaçage autre langage
    Réponses: 3
    Dernier message: 26/10/2005, 17h51

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