java - 无法从静态主函数内部调用非静态构造函数

标签 java compiler-errors static

public class Main {
    private JLabel lb = new JLabel();
    private JButton btn = new JButton();

    public class events extends JFrame{
        public events(){
            setLayout(new FlowLayout());

            btn = new JButton("Click for text");
            lb = new JLabel();

            add(btn);
            add(lb);

            event  e = new event();
            btn.addActionListener(e);

        }
        public static stConst() {

        }
    }

    public class event implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            lb.setText("Now there is text here.");
        }
    }

    public static void main(String[] args) {
        events gui = new events();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setSize(300, 300);
        gui.setVisible(true);
    }
}

好吧,在你因为我的命名约定而对我大喊大叫之前,让我说我知道我的变量名有多糟糕。我一直在试图弄清楚 java.swing 事件处理,我终于找到了一个我认为可能有效的示例程序,但随后它给了我错误“无法从静态上下文引用非静态变量”。它在调用构造函数的底部行上给了我错误,所以我认为该错误与构造函数中使用的“this”对象有关,或者可能由于某种原因它不允许我调用我的非静态构造函数从我的静态主函数内部。我该如何解决这个问题?

最佳答案

由于事件是非静态内部类,因此必须需要父类的引用才能初始化。

选项 1:

您可以在静态方法中使用以下语句简单地调用内部类构造函数:

events gui = new Main().new events();

选项 2:

创建一个非静态函数(如 init),然后从该函数创建事件实例。从静态函数创建父类的实例,然后调用这个非静态函数:

public static void main(String[] args) {
    Main main = new Main();
    main.init();
}

public void init() {
    events gui = new events();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setSize(300, 300);
    gui.setVisible(true);

}

输出:

enter image description here

关于java - 无法从静态主函数内部调用非静态构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51617774/

相关文章:

Java 8 流条件处理

c# - Unity3D项目配置: Treat warnings as errors

ios - 如何在Swift中调用协议(protocol)提供的静态方法

tsql - 如果…ELSE…两个互斥插入INTO #temptable

php - 是否可以将Laravel 5.5.40降级到5.5.20?

objective-c - Objective-C 中 static const 和 #define 的区别

resources - 如何使用 Sproutcore 应用程序的 CSS 引用图像?

java - 以编程方式更改资源 getString()

java - smartGWT 日期输入 validator

java - OpenCV Java : Card Extraction from Image