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

Langage Java Discussion :

Soucis avec Java sous Mac OS X


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Soucis avec Java sous Mac OS X
    Bonjour,

    J'ai travaillé sur le développement d'une application Java, réalisée avec Eclipse, sur un pc. L'application permet de se connecter à un serveur FTP et de transférer des fichiers vers ce serveur, tout en affichant une barre de progression qui évolue au fur et à mesure que le fichier est envoyé. L'envoie du fichier se fait dans un thread, et le calcul de la progression dans un autre. Ca fonctionne très bien lorsqu'on exécute l'application sur un pc.

    Seulement voila, cette application doit également fonctionner sur Mac ce qui théoriquement ne devrait poser aucun soucis de portabilité, mais le soucis c'est que sous Mac, le thread de la barre de progression ne fonctionne pas. Le fichier s'envoie, le processus principal se met à jour, mais la barre de progression n'évolue pas du tout.

    Phénomène encore plus curieux, si je mets un breakpoint, sur l'une des lignes contenues dans le run(), le débugger s'arrête correctement dans le thread, et la barre de progression se met à jour! Mais sinon en temps normal rien.

    Pour tacher de régler ce problème, j'ai déjà tenté de supprimer les autres threads, jouer sur les priorités ou encore dédoubler les ressources communes, mais rien n'y fait. Je vous ajoute le code de la fonction en question à la suite, si vous avez la moindre indication, je suis preneur.

    Merci d'avance

    Moila

    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
     
    void UpdateProgressBar()
    {
    	Thread oUpdateThread = new Thread() 
    	{
    		public void run() 
    		{
    			FTPManager oFTP = new FTPManager();
    			// While the instance is existing
    			long iSize = new File(m_oNewMovie.GetLocalPath()).length();
     
    			while(m_oNewMovie.GetState() != StateMovie.ID_STATE_OK && m_oNewMovie.GetState() != StateMovie.ID_STATE_INVALID && m_oNewMovie.GetState() != StateMovie.ID_STATE_ERROR && m_oNewMovie.GetState() != StateMovie.ID_STATE_ABORD)
    			{
    				if(m_oNewMovie.GetState() == StateMovie.ID_STATE_RUNNING || m_oNewMovie.GetState() == StateMovie.ID_STATE_RETRY)
    				{
    					long iCurrentSize = 0;
    					try 
    					{
    						iCurrentSize = oFTP.FTPGetFileSize(m_oNewMovie);
    						if(iCurrentSize > 0)
    						{
    							float iValue = (float)iCurrentSize/iSize;
    								m_oDataLoad.setValue((int)(iValue * 1000));
    								m_oDataLoad.setString((int)(iValue * 100) + " %");
    							m_oDataLoad.validate();
    							m_oDataLoad.repaint();
    						}
    					} 
    					catch (IOException e) 
    					{
    						System.out.println("FTP : Impossible d'obtenir la taille");
    					}
    				}
     
    			}
    			// To be sure the last "list" stop the progresbar at 99%
    			if(m_oNewMovie.GetState() == StateMovie.ID_STATE_OK)
    			{
    				m_oDataLoad.setValue(1000);
    				m_oDataLoad.setString("100 %");
    			}
    			if(m_oNewMovie.GetState() == StateMovie.ID_STATE_ABORD)
    			{
    				try {
    					oFTP.FTPDisconnect();
    				} catch (IOException e) {
    					System.out.println("dÈco : "+e);
    				}
    			}
    		}
    	};
     
    	// Set the Thread as deamon
    	oUpdateThread.setDaemon(true);
     
    	 // and go!
    	oUpdateThread.setPriority(Thread.MAX_PRIORITY);
    	oUpdateThread.start();		
    }

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il ne faut pas toucher aux éléments graphiques (sauf si ceux ci sont thread safe, comme indiqué dans la javadoc) dans un autre thread que le thread principal.
    Il y a des tas de threads sur le sujet sur le forum.
    Tu peux regarder du côté de la classe SwingWorker ou de la méthode SwingUtilities.invokeLater().
    Même si ça ne résolvait pas ton problème, c'est une pratique à respecter.

    http://gfx.developpez.com/tutoriel/j...ing-threading/

    http://java.developpez.com/faq/gui/?...EDTAutreThread

    http://java.sun.com/docs/books/tutor...ncy/index.html

Discussions similaires

  1. Prolog avec java sous eclipse mac Os
    Par sirius911 dans le forum Prolog
    Réponses: 2
    Dernier message: 19/12/2012, 01h16
  2. Création d'un fichier HTML avec Java sous Mac OS
    Par marooned dans le forum Général Java
    Réponses: 12
    Dernier message: 18/05/2012, 11h07
  3. Souci avec DlPortIO sous BDS 2006
    Par kurul1 dans le forum C++Builder
    Réponses: 33
    Dernier message: 27/10/2008, 16h49
  4. Configuration SDL avec eclipse sous Mac
    Par kitsune dans le forum SDL
    Réponses: 6
    Dernier message: 27/04/2007, 11h59
  5. Souci en Java sous eclipse
    Par gecko64 dans le forum Langage
    Réponses: 3
    Dernier message: 25/01/2007, 08h51

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