首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从静态主函数内部调用非静态构造函数。

无法从静态主函数内部调用非静态构造函数。
EN

Stack Overflow用户
提问于 2018-07-31 16:11:19
回答 2查看 51关注 0票数 2
代码语言:javascript
运行
复制
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“对象有关,或者由于某种原因,它不允许我从我的静态主函数中调用我的非静态构造函数。我该怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 16:28:40

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

选项1:

您只需在静态方法中使用以下语句调用内部类构造函数:

代码语言:javascript
运行
复制
events gui = new Main().new events();

备选方案2:

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

代码语言:javascript
运行
复制
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);

}

输出:

票数 1
EN

Stack Overflow用户

发布于 2018-07-31 16:15:05

您的内部类,eventevents不是static -它们属于Main类的特定实例(换句话说,每个实例都有自己的内部类)。但是,main方法 static,因此不能引用实例成员(即使它们是类!)从它开始。

将内部类以及他们所依赖的Main的数据成员更改为static应该可以解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51617774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档