Print at Dec 22, 2025, 8:46:39 AM

Posted by guillaume_ll at May 11, 2010, 5:04:26 PM
Re: quelques besoins d'aide
Je viens de voir le EventQueue, je ne connaissais pas ; ça m'a permis de corriger un bug (que j'ai découvert en même temps), et donc ai je bien compris ?
De ce que j'ai compris du bug, en AWT, les déplacements d'un objet peuvent être rendus dans des threads différents. Ce qui fait des race conditions : La solution que j'ai trouvée a été de déporter les mises à jour du modèle dans un Runnable placé dans l'EventQueue . ( au départ, l'idée était surtout de réduire la charge CPU en mutualisant les mises à jour, mais ça a corrigé un bug en même temps )

Sinon, en supprimant le
home.removeFurnitureListener(this);
et en le remplaçant par un affichage sur stdout, je vois que les objets qui sont créés sont :
interception of item com.eteks.sweethome3d.model.HomePieceOfFurniture@256f8834 creation
interception of item com.eteks.sweethome3d.model.HomePieceOfFurniture@6c28ca1c creation
loading file /home/guillaume/pastelGrid.xml
interception of item lelouet.sh3d.plugins.sweetDatacenter.model.GRack@64d1afd3 creation
interception of item lelouet.sh3d.plugins.sweetDatacenter.model.GServer@3bea817f creation
interception of item lelouet.sh3d.plugins.sweetDatacenter.model.GServer@42d134d0 creation
interception of item lelouet.sh3d.plugins.sweetDatacenter.model.GServer@25fe4d40 creation

Je trouve facilement comment filtrer pour laisser passer les ajouts d'éléments rack et model, mais par la suite je voudrais convertir les "HomePieceOfFurniture" en "GRack" ou "GServer", selon la catégorie du modèle. Est il alors possible de récupérer, à partir d'une HomePieceOfFurniture la catégorie de son modèle ?

Concernant la création d'objets dans sh3d, je compte utiliser une factory ( http://code.google.com/p/lelouettests/source/...odel/GElementFactory.java ) crée dans le plugin et ajoutée au listener, ce qui devrait à mon avis supprimer le problème du classloader (puisque l'objet factory est atteignable et connait son class loader)
Est ce un raisonnement correct ?