java - interfaz - Los métodos presentes en la clase Frame, que extiende JFrame, no se pueden invocar en main()
java swing tutorial pdf español (2)
El código proporcionado a continuación da error ( Cannot make a static reference to the non-static method setVisible(boolean) from the type Window
):
import javax.swing.JFrame;
public class Frame extends JFrame{
public static void main(String[] args) {
setVisible(true);
}
}
Mientras que este compila bien:
import javax.swing.JFrame;
public class Frame extends JFrame{
Frame() {
setVisible(true);
}
}
Cuando digo Frame extends JFrame
, esto significa que Frame hereda todos los métodos de JFrame (diciendo libremente), incluyendo setVisible(boolean)
. Entonces, ¿por qué no puedo invocar setVisible(true)
en main()
, mientras que puedo hacerlo en otros métodos?
El problema es que estás intentando llamar a un método desde main()
que es como puedes ver estático. Sin embargo, el método setVisible()
no es estático.
El error que estás obteniendo es exactamente eso. En un contexto estático, solo puede llamar al método estático. setVisible()
no es estático, por lo tanto, necesita tener una instancia de su clase Frame para llamar al método. Podría ser tu principal:
Frame myFrame = new Frame()
myFrame.setVisible(true)
Descargo de responsabilidad: lo siento por cualquier error que pueda ver en esta respuesta Estoy en el teléfono.
Espero eso ayude.
La pista está en el mensaje de excepción.
El método setVisible
es un método de instancia en JFrame
en public static void main
, se encuentra en un contexto estático, por lo que no hay ninguna instancia de Frame
para llamar a setVisible
.
Podrías hacerlo:
public static void main(String[] args) {
new Frame().setVisible(true);
}
porque entonces tienes una instancia
https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html podría ayudar