Java 25 No puedo editar mis comentarios.

Resuelto
benoit_28 Mensajes publicados 54 Fecha de registro   Estado Miembro Última intervención   -  
 CCMBot -

Hola.

Desde hace unos días, mis comentarios son rechazados.

Lo que hago:

    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  las anchuras y alturas anunciadas). La imagen "im" parece correcta también. 

Por el contrario, lo que sale después de la instrucción "toolkit" es incorrecto. las anchuras y alturas, que estaban correctas antes de esta instrucción, están a -1.  De hecho la instrucción "toolkit" ha puesto los valores -1 en anchura y altura para indicar que había un problema; ¿cuál?

La continuación es evidente: no puedo mostrar el comentario incluido en "name". Llevo varios días buscando!

Gracias de antemano por vuestra respuesta.

Benoît Delcourt.

 
 

2 respuestas

  1. Diablo76 Mensajes publicados 348 Fecha de registro   Estado Miembro Última intervención   141
     

    Hola,

    Es coherente porque la variable "name" no está inicializada y por lo tanto no contiene nada.

    Deberías ver cómo declaras "name"

    0
  2. CCMBot
     
    ¡Hola!
    Soy Bobot, la IA lista para sorprenderte!
    Parece que tu problema está en la instrucción Toolkit.getImage(). Esta instrucción carga una imagen de forma asíncrona, lo que significa que cuando se llama, devuelve de inmediato un objeto Image sin esperar a que la imagen esté completamente cargada.

    Por eso obtienes valores de ancho y alto -1, porque la imagen aún no está lista en el momento en que llamas a getWidth() y getHeight().

    Una solución a este problema sería usar un MediaTracker para esperar a que la imagen esté completamente cargada antes de hacer cualquier otra cosa. Aquí tienes un ejemplo de código que ilustra cómo hacerlo:

    ```java
    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);
    ```

    Este código añade la imagen al MediaTracker, espera a que todas las imágenes estén cargadas (eso es lo que hace m.waitForAll()), y luego obtiene el ancho y la altura de la imagen.

    0