Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [JAVA] Attendre la fin d'un chargement avant d'executer une opération
Login Mot de passe

3 visiteurs sur ce topic (0 membre(s), 3 invité(s) )


Auteur
Sujet : [JAVA] Attendre la fin d'un chargement avant d'executer une opération
Finch
Sage
Membre # 5042

 Avatar du membre
Lieu : BE

Messages :
1772 (0.27 par jour)




Message du 21-04-2007 @ 18:32   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Bonjour à tous,

J'ai un petit programme Java avec la bibliothèque Batik (manip de fichier SVG).

J'aimerais charger un fichier SVG (un plan) qui contient plusieurs couches (murs, portes, ...) et afficher les couches qui sont présentes ou non.

Voici les étapes:
-Chargement du fichier dans l'objet svgCanvas (batik)
-Je récupère le "Document" (DOM) avec document = svgCanvas.getSVGDocument();
-Je parcours l'objet document et je modifie l'affichage des couches.

Bon theoriquement tout ca fonctionne...

Mais, lorsque Batik charge un document, il lance un thread qui effectue le travail...
Mais pendant ce temps la, le programme continue de fonctionner

//Dans cette fonction, j'appelle la fonction qui charge le fichier SVG et j'appelle celle qui va parcourir le document DOM résultant du chargement
Code :


private void jButtonDefautActionPerformed(java.awt.event.ActionEvent evt) {

String docStr = "file:/c:/monFichier.svg";
try {
moteur.chargerFichier(docStr,evt ));
refreshMenu();
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
}
}




//Chargement du fichier dans un objet svgcanvas...après à la fin récupère le document DOM
Code :


void chargerFichier(String url, ActionEvent ae ) {

svgCanvas.setURI(url);

[...]
svgCanvas.addSVGLoadEventDispatcherListener
(new SVGLoadEventDispatcherAdapter() {
public void svgLoadEventDispatchStarted
(SVGLoadEventDispatcherEvent e) {

document = svgCanvas.getSVGDocument();
}
});

}




Mon problème c'est que le programme execute la fonction refreshmenu() avant que l'on obtienne le document (il arrive quelques secondes après).
Batik est toujours entraint de charger le svg dans le svgcanvas.


Comment je pourrais facilement forcer le programme a attendre que l'objet Document document soit complet avant d'executer les fonctions d'après?

J'ai essayé une sorte de:

moteur.chargerFichier(docStr,evt );
while(moteur.getDocument==null) {}
refreshMenu();

Mais il bloque tout le programme.
J'ai aussi essayé de mettre des flags "chargementEnCours" mais c'est pareil...

[message édité le 21-04-2007 @ 18:36 Par Finch]
----------
Qui prête à rire n'est jamais sûr d'être remboursé... [R. Devos]
- Haut de page -
boubavic
Vétéran
Membre # 10228

 Avatar du membre
Lieu : Boulogne Billancourt

Messages :
3991 (0.63 par jour)


Score :

Message du 21-04-2007 @ 23:06   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

synchronize de thread peut être ?
- Haut de page -
Finch
Sage
Membre # 5042

 Avatar du membre
Lieu : BE

Messages :
1772 (0.27 par jour)




Message du 22-04-2007 @ 10:49   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Le problème c'est que c'est pas un thread.
C'est une simple classe.
C'est dans les classes de Batik qu'il y un thread.
----------
Qui prête à rire n'est jamais sûr d'être remboursé... [R. Devos]
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23305 (3.21 par jour)


Score :

Message du 23-04-2007 @ 7:57   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

la vieille methode avec un fichier token.

Le process 2 n'attends pas le fichier a lire, mais il attend un autre fichier, fichier.extension.ok (par exemple), si il est la, il lit fichier.extension
le process 1, ecrit fichier.extension, et a la fin du process, ecrit fichier.extension.ok


'fin si j'ai compris tout ce que tu dois faire :p

ok, ca n'a rien avoir ... oublie ce que j'ai dit :p


[message édité le 23-04-2007 @ 8:02 Par icy]
----------
ITLive.be
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.024 secondes