gpt4 book ai didi

java - 在单独的框架类中实现窗口监听器

转载 作者:行者123 更新时间:2023-11-29 03:21:56 25 4
gpt4 key购买 nike

所以我得到的错误是无法访问类型 Window 的封闭实例。必须用 Window 类型的封闭实例限定分配(例如 x.new A() ,其中 x 是 Window 的实例)。我认为这是因为我正在尝试实例化一个私有(private)类,但是如果我尝试使用它,我会得到一个错误,即 htis 不能在静态上下文中使用。那么我该怎么做才能让 hte windo wlistener 正常工作呢?

    public class Window {
static MathGame mg;

private static void createAndShowGUI() {
JFrame frame = new JFrame("Epsilon");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mg = new MathGame();
frame.getContentPane().add(mg);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

//error here: No enclosing instance of type Window is accessible.
//Must qualify the allocation with an enclosing instance of type Window
(e.g. x.new A() where x is an instance of Window).

MathWindowStateListener wsListener = new MathWindowStateListener();

frame.addWindowStateListener(new MathWindowStateListener());
}

/**
* @param args
*/
public static void main(String[] args) {

javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});

}

private class MathWindowStateListener implements WindowStateListener{

@Override
public void windowStateChanged(WindowEvent we) {
if(we.equals(WindowEvent.WINDOW_CLOSED))
{
System.out.println("window closed");
mg.sql.removeUser();
}
else if(we.equals(WindowEvent.WINDOW_CLOSING))
System.out.println("window closing");
}
}
}

最佳答案

问题是您试图在静态上下文中使用它,并且由于内部类本身不是静态的,因此它需要一个封闭类的实例才能存在——也就是说,它需要被构造在那个封闭的实例上。这将导致一些有趣/丑陋的代码,例如

MathWindowStateListener wsListener = mg.new MathWindowStateListener();

最好将私有(private)内部类设置为 static,这将解决您的问题,而无需求助于上述问题。

关于java - 在单独的框架类中实现窗口监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074082/

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