无法在 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 上的此答案中可能出现的任何错误,我们深表歉意。

希望对您有所帮助。