2015-07-07 1 views
2

Приведенный ниже код дает ошибку (Cannot make a static reference to the non-static method setVisible(boolean) from the type Window):методы, присутствующие в классе Рама, которая простирается JFrame, не может быть использовано в главной()

import javax.swing.JFrame; 

public class Frame extends JFrame{ 
    public static void main(String[] args) { 
     setVisible(true); 
    } 
} 

В то время как этот компилируется нормально:

import javax.swing.JFrame; 

public class Frame extends JFrame{ 
    Frame() { 
     setVisible(true); 
    } 
} 

Когда я говорю Frame extends JFrame, это означает, что Frame наследует все методы из JFrame (свободно говоря), включая setVisible(boolean). Так почему я не могу вызвать setVisible(true) в main(), а я могу сделать это другими способами?

+1

'static' означает, что существует один экземпляр метода, независимо от того, существуют ли какие-либо объекты этого класса. Вы не можете вызвать метод, который не является статичным, если метод, из которого вы вызываете, является статическим, особенно если нет инициализированного объекта. – frieder

ответ

4

Ключ в сообщении об исключении.

setVisible метод является методом экземпляра на JFrame

в public static void main, вы в статическом контексте, так что нет ни одного случая Frame назвать setVisible на.

Вы можете сделать:

public static void main(String[] args) { 
    new Frame().setVisible(true); 
} 

, потому что тогда у вас есть экземпляр

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html может помочь

1

Проблема заключается в том, что вы пытаетесь вызвать метод из main(), который, как вы можете см. статический. Однако метод setVisible() не является статичным.

Ошибка, которую вы получаете, в точности объясняет это. В статическом контексте вы можете вызвать только статический метод. setVisible() не является статическим, поэтому для вызова метода необходимо иметь экземпляр класса Frame. Может быть, в вашей основной:

Frame myFrame = new Frame() 
myFrame.setVisible(true) 

Отказ от ответственности: извините за любую ошибку, вы можете увидеть на этом ответе я на телефоне.

Надеюсь, это поможет.

Смежные вопросы