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>
}
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 (unShape
, unColor
y dosint
), 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 pasanShape
,Color
y dosint
en la definición del constructor), lo que es una discrepancia con los cuatro parámetros esperados por la instanciaComposant
cuando crea una nueva instancia deDessinComponent
.Para corregir este error, debes modificar el constructor de
DessinComponent
para que tome cuatro parámetros:También debes tener en cuenta que debes llamar a los métodos
setLocation
ysetSize
en el constructor deDessinComponent
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.