当我试图在Eclipse中编译/启动我的程序时,我得到了一个错误没有可以访问的mainframeclass类型的封闭实例。代码如下:
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
的构造函数中,使其仍然是一个静态嵌套类,要么在main
方法中使mainframemenuitem1
成为final,并为action listener创建一个匿名内部类。
话虽如此:
我对java有点陌生
在这种情况下,我将暂时停止使用GUI。学习一种新语言要简单得多,而不需要GUI带来的复杂性。编写控制台应用程序可以让您一次只专注于学习一件事情。
我想让具有多个内部类的抽象类对其进行扩展,并可以通过静态方法创建其内部类的实例,但我得到编译器错误“无法访问ITask类型的封闭实例。必须使用ITask类型的封闭实例限定分配(例如,x.new A(),其中x是ITask的实例)。” 我发现内部类应该由外部类的实例创建,但是我的外部类有抽象方法,我不能创建它的实例。我创建了扩展父类的内部类,因为我习惯于控制它们的创建。那么有没有办法让我的模式发挥作
我有以下代码: 我知道什么都不做,但我的Hello,World程序没有它也可以编译。只有我定义的类在我身上失败了。 它拒绝编译。我得到在创建新事物的行中。我猜: 我有系统级问题(在DrJava或我的Java安装中)或 我对如何用java构建工作程序有一些基本的误解 有什么想法吗?
问题内容: 我有以下代码: 我知道什么Thing也没做,但是没有它我的Hello,World程序就可以编译。只有我定义的类对我不利。 并且它拒绝编译。我到达创建新事物的路线。我猜是: 我有系统级别的问题(在DrJava或Java安装中)或 我对如何在Java中构建工作程序有一些基本的误解。 问题答案: 将使你的程序正常运行。 实际上,你已经拥有一个内部类,该内部类(根据定义)与的特定实例相关联(即
整个守则是: 为什么会出现以下代码段: 导致以下错误: 无法访问ThreadLocalTest类型的封闭实例。必须使用ThreadLocalTest类型的封闭实例限定分配(例如,x.new A(),其中x是ThreadLocalTest的实例)。 核心问题是:我想在静态方法中初始化内部类。这里有两种解决方案: > 使用外部引用,如:
问题内容: 出于教育目的,我尝试制作一个服务器和一个客户端,其中服务器从多个客户端接收数据并回显每条消息。问题是,当我尝试让服务器一次将回显发送到所有客户端时。 我搜寻并回答了许多类似的问题,但是没有一个对我有帮助。希望你能指出我的错误。提前致谢。 问题答案: 您的嵌套类需要外部类的一个实例,因为它不是静态的-但你不 具备 外部类的一个实例。 尝试制作两个嵌套类。看起来他们无论如何都不 需要 引用
我有一个叫做GreenhouseControls的类,它有很多 内置于其中的类,例如: 我从文本文件中提取值以获取事件名称(如“ThermostatNight”)和时间值(如“2000”)。为了用这些值实例化一个新对象,我构建了一个EventFactory,它接受这些值作为参数。 这是我构建的类,用于从文本文件值创建新的事件对象: 当我运行这个程序时,一切都运行得很好,直到我将EventFacto