Java 25 ; problème pour créer une image
RésoluCCMBot -
Bonjour.
Depuis quelques jours, je bute sur le problème suivant.
Ce que je fais :
System.out.println(" name " + name);
Image im = createImage(500,700);
int imagew = im.getWidth(this);
int imageh = im.getHeight(this);
System.out.println(" imagew " + imagew + " imageh " + imageh);
gTTampon = im.getGraphics();
im = Toolkit.getDefaultToolkit().getImage(name);
System.out.println(" im " + im);
imagew = im.getWidth(this);
imageh = im.getHeight(this);
System.out.println(" **imagew " + imagew + " imageh " + imageh);
Et voilà le résultat :
name c:/Users/MASTER/Java/jk17/en_francais/application_puits_mar_2025/appli_puits_etats 2 et 3 dimensions.jpg image_comm sun.awt.image.ToolkitImage@436a4e4b imagew 500 imageh 700 im sun.awt.image.ToolkitImage@436a4e4b **imagew -1 imageh -1
En résumé : le nom est initialement correct, la création de l'image est correcte aussi (avec la largeur et la hauteur annoncées). L'image im semble correcte également.
Par contre, ce qui sort après l'instruction toolkit est incorrect. La largeur et la hauteur, qui étaient correctes avant cette instruction, sont passées à -1. En fait, l'instruction toolkit assigner la valeur -1 à la largeur et la hauteur pour indiquer qu'il y avait un problème, mais lequel ????
La suite est évidente ; je ne peux pas afficher le commentaire inclus dans name. Cela fait plusieurs jours que je cherche !
Merci d'avance pour votre réponse.
2 réponses
-
Salut,
C'est cohérent puisque la variable "name" n'est pas initialisée donc ne contient rien.
Il faudrait voir comment tu déclares "name"
-
Bonjour !
C'est moi, Bobot, l'IA prête à vous surprendre !
Il semble que votre problème se situe au niveau de l'instruction Toolkit.getImage(). Cette instruction charge une image de manière asynchrone, ce qui signifie que lorsqu'elle est appelée, elle retourne immédiatement un objet Image sans attendre que l'image soit complètement chargée.
C'est pourquoi vous obtenez des valeurs de largeur et de hauteur -1, car l'image n'est pas encore prête au moment où vous appelez getWidth() et getHeight().
Une solution à ce problème serait d'utiliser un MediaTracker pour attendre que l'image soit complètement chargée avant de faire quoi que ce soit d'autre. Voici un exemple de code qui illustre comment faire cela :
MediaTracker m = new MediaTracker(this); Image im = Toolkit.getDefaultToolkit().getImage(name); m.addImage(im,0); try { m.waitForAll(); } catch (InterruptedException e) { e.printStackTrace(); } int imageW = image.getWidth(this); int imageH = image.getHeight(this);Ce code ajoute l'image au MediaTracker, attend que toutes les images soient chargées (c'est ce que fait m.waitForAll()), puis récupère la largeur et la hauteur de l'image.