无法在 main() 中调用扩展 JFrame 的 Frame class 中存在的方法
Methods present in Frame class, which extends JFrame, can't be invoked in main()
下面给出的代码给出了错误 (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);
}
}
虽然这个编译得很好:
import javax.swing.JFrame;
public class Frame extends JFrame{
Frame() {
setVisible(true);
}
}
当我说 Frame extends JFrame
时,这意味着 Frame 继承了 JFrame 的所有方法(粗略地说),包括 setVisible(boolean)
。那么,为什么我不能在 main()
中调用 setVisible(true)
,而我可以在其他方法中调用?
线索在异常消息中。
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 可能有帮助
问题是您正试图从 main()
调用一个方法,正如您所见,它是静态的。但是 setVisible()
方法不是静态的。
您遇到的错误正是对这一点的解释。在静态上下文中,您只能调用静态方法。 setVisible()
不是静态的,因此您需要有一个 Frame class 的实例才能调用该方法。可能在您的主目录中:
Frame myFrame = new Frame()
myFrame.setVisible(true)
免责声明:对于我在 phone 上的此答案中可能出现的任何错误,我们深表歉意。
希望对您有所帮助。
下面给出的代码给出了错误 (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);
}
}
虽然这个编译得很好:
import javax.swing.JFrame;
public class Frame extends JFrame{
Frame() {
setVisible(true);
}
}
当我说 Frame extends JFrame
时,这意味着 Frame 继承了 JFrame 的所有方法(粗略地说),包括 setVisible(boolean)
。那么,为什么我不能在 main()
中调用 setVisible(true)
,而我可以在其他方法中调用?
线索在异常消息中。
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 可能有帮助
问题是您正试图从 main()
调用一个方法,正如您所见,它是静态的。但是 setVisible()
方法不是静态的。
您遇到的错误正是对这一点的解释。在静态上下文中,您只能调用静态方法。 setVisible()
不是静态的,因此您需要有一个 Frame class 的实例才能调用该方法。可能在您的主目录中:
Frame myFrame = new Frame()
myFrame.setVisible(true)
免责声明:对于我在 phone 上的此答案中可能出现的任何错误,我们深表歉意。
希望对您有所帮助。