es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción en el hilo “AWT-EventQueue-0” de Java AWT

Quiero que este programa se despliegue en el lugar de la pantalla donde hice clic en un rectángulo Shape ya creado en la clase Contenaire.
Quise basarlo en esta jerarquía awt Componente->Contenedor->Marco para no cometer errores, pero aún así lo hice.
¿Por qué me muestra este error? :

Excepción en el subproceso “AWT-EventQueue-0” java.lang.NoSuchMethodError: ‘void DessinComponent.(java.awt.Shape, java.awt.Color, int, int)’

Esta es la primera vez que trabajo con Java, así que todavía estoy aprendiendo.

Una de las respuestas que encontré fue:

Ese es el hilo de despacho de eventos de AWT (EDT). El código que involucre AWT o Swing debe ejecutarse en ese hilo. Este es el hilo en el que se encontrará cuando, en el main (ejecutándose en el hilo “main”), llame típicamente a java.awt.EventQueue.invokeLater

Agregué java.awt.EventQueue.invokeLater y aún no funcionó.

import java.awt.<em>;
import java.awt.event.</em>;
import java.awt.geom.*;
import java.awt.geom.Rectangle2D.Double;

public class TestGraphic2 {
    public static void main(String... args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                Frame frame = new Frame();
                frame.setSize(600, 400);
                frame.setLocationRelativeTo(null);
                frame.add(new Contenaire());
                frame.setVisible(true);
                frame.addWindowListener(new WindowAdapter(){
                    @Override
                    public void windowClosing(WindowEvent e) {
                        frame.dispose();
                    }
                });
            }
        });
    }
}

class Contenaire extends Container {

<pre><code>private Shape shape;
private DessinComponent composant;
public Contenaire() {
    super();
    setLayout(null);
    setLocation(0, 0);
    setSize(Short.MAX_VALUE, Short.MAX_VALUE);
    shape = new Rectangle2D.Double(160, 220, 100, 40);
    addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e) {    
                    int x = e.getX();
                    int y = e.getY();

                    composant = new DessinComponent(shape,Color.green,x,y);
                    add(composant);
                }


    });
}
</code></pre>

}

class DessinComponent extends Component {

<pre><code>private Shape shape;
private Color color;

public DessinComponent(Shape shape, Color color, int x, int y) {
    this.shape = shape;
    this.color = color;
    //setLocation(0, 0);
    //setSize(Short.MAX_VALUE, Short.MAX_VALUE);
}

@Override
public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(color);
    g2.draw(shape);
}
</code></pre>

}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “java.lang.NoSuchMethodError: ‘void DessinComponent.(java.awt.Shape, java.awt.Color, int, int)'” significa que la clase DessinComponent espera un constructor con cuatro parámetros (un Shape, un Color y dos int), pero no se puede encontrar tal constructor. Esto podría ser causado por una discrepancia entre la definición del constructor y la forma en que se llama en el código.

    En el código proporcionado, el constructor de DessinComponent está definido con tres parámetros (se pasan Shape, Color y dos int en la definición del constructor), lo que es una discrepancia con los cuatro parámetros esperados por la instancia Composant cuando crea una nueva instancia de DessinComponent.

    Para corregir este error, debes modificar el constructor de DessinComponent para que tome cuatro parámetros:

    public DessinComponent(Shape shape, Color color, int x, int y) {
        this.shape = shape;
        this.color = color;
        setLocation(x, y);
        setSize(Short.MAX_VALUE, Short.MAX_VALUE);
    }
    

    También debes tener en cuenta que debes llamar a los métodos setLocation y setSize en el constructor de DessinComponent para establecer la ubicación y el tamaño del componente.

    Después de hacer estos cambios, el error debe resolverse y el programa debería funcionar como se espera.

Comments are closed.