gpt4 book ai didi

java - 无法访问大型机类类型的封闭实例

转载 作者:行者123 更新时间:2023-12-01 18:52:52 25 4
gpt4 key购买 nike

我收到错误 No enclosing instance of type mainframeclass is accessible当我尝试在 Eclipse 中编译/启动我的程序时。这是代码:

public class mainframeclass {

public static Object mainframemenuitem1;

public static void main(String[] args) {
JFrame mainframe = new JFrame(variables.mainframename);

mainframe.setLayout(new GridLayout());

mainframe.setSize(variables.mainframewith, variables.mainframeheight);
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainframe.setVisible(variables.mainframevisible);
mainframe.setResizable(variables.mainframeresizable);

JMenuBar mainframemenubar = new JMenuBar();
JMenu mainframemenu = new JMenu("File");
JMenuItem mainframemenuitem1 = new JMenuItem("Exit");
mainframe.setJMenuBar(mainframemenubar);

mainframemenubar.add(mainframemenu);
mainframemenu.add(mainframemenuitem1);

actionlistener listen = new actionlistener();
mainframemenuitem1.addActionListener(listen);

runningclass.running();
}

public class actionlistener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == mainframemenuitem1)
System.out.println("Test");
}
}
}

看来我做错了什么:

actionlistener listen = new actionlistener();

但我不知道是什么。我是 Java 新手,希望对这个问题有任何见解。谢谢。

最佳答案

您的 actionlistener 类(应重命名为遵循 Java 命名约定并使用更有意义的名称)是一个内部类(与静态嵌套类相对) ,这意味着它仅对要引用的 mainframeclass 的封闭实例有效...它实际上需要,因为它引用 mainframemenuitem1 无论如何都是静态的。

所以你可以将其更改为:

public static class actionlistener implements ActionListener

它应该可以工作。好吧,无论如何它都会编译。它实际上不会执行您想要的操作,因为您有两个 mainframemenuitem1 变量 - 静态变量,然后是 main 中的一个本地变量> 方法,因此静态方法永远不会被分配非空值。

我要么将 mainframemenuitem1 传递到 actionlistener 的构造函数中,并仍然使其成为静态嵌套类,或者只是将 mainframemenuitem1main 方法并为操作监听器创建一个匿名内部类。

话虽如此:

i am kinda new to java

在这种情况下,我实际上会暂时停止使用 GUI。学习一门新语言要简单得多,没有 GUI 带来的复杂性。编写控制台应用程序可以让您一次集中精力学习一件事

关于java - 无法访问大型机类类型的封闭实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com