setVisible()方法在静态方法中不起作用

时间:2014-05-05 04:49:16

标签: java swing jframe

我是JFrame的新手,我正在尝试做一个项目,因为如果按下Logout按钮,下面的代码就会完美地执行,

public void actionlogout() {
    lButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            try {
                new Login();
                setVisible(false);
                dispose();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

现在我的问题是当我试图从同一个包中的另一个文件调用相同的actionlogout时,它要求将方法的类型更改为静态,所以我将方法更改为静态,但它在调用setVisible(假)

Cannot make a static reference to the non-static method setVisible(boolean) from the type Window

我现在要做什么?

3 个答案:

答案 0 :(得分:2)

那是因为setVisible是非静态方法,你试图从静态代码/方法块中引用它,

在java中,静态事物首先在类加载时被加载,并且它不会有非静态成员的任何知识,因此当你尝试从静态块中引用非静态事物时它会产生这个错误。

您必须从非静态代码块调用setVisible,这是唯一的解决方案。

答案 1 :(得分:0)

您正在调用方法setVisible(),这是一种实例方法,意味着它附加到对象实例。所以,你不能在没有引用它的任何对象的情况下调用它。要调用它,您需要将其作为静态方法。所以,它会成为一个类的成员,而不是任何对象。

您可以将static修饰符添加到方法setVisible()。但是,由于它是来自Component API的继承方法,因此无法完成此操作。所以,你需要从非静态上下文进行调用。

当您希望功能跨多个类时,您可以将其作为实用程序方法并将其移动到具有所有实用程序方法的单独类

答案 2 :(得分:0)

很简单,试试这个:

a = new login();
a.setVisible();

由于创建的对象是静态的,它应该类似于 setVisible 类型。希望我解决了你的疑惑。