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

0 visiteurs sur ce topic (0 membre(s))

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



 






Message du 21-04-2007 @ 18:32


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]
- Haut de page -
boubavic



 






Message du 21-04-2007 @ 23:06

synchronize de thread peut être ?
- Haut de page -
Finch



 






Message du 22-04-2007 @ 10:49

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.
- Haut de page -
icy



 






Message du 23-04-2007 @ 7:57

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]
- Haut de page -

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.045 secondes