1

So the error I get is 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). I think it's because i'm trying to instantiate a private class, but if I try and use this, I get an eror that htis cannot be used in a static context. So what I do to get hte windo wlistener working?

    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");
        }           
    }    
}
mKorbel
  • 109,525
  • 20
  • 134
  • 319
rasen58
  • 4,672
  • 8
  • 39
  • 74
  • Possible duplicate of [Java - No enclosing instance of type Foo is accessible](http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – fabian Mar 03 '16 at 23:59

1 Answers1

4

The issue is that you're trying to use it in a static context, and since the inner class is not static itself, it needs an instance of the enclosing class for it to exist -- i.e., it needs to be constructed on that enclosing instance. This will lead to some funny/ugly code such as

MathWindowStateListener wsListener = mg.new MathWindowStateListener();

Better to make the private inner class static and this will solve your problem without resorting to the above kludge.

Hovercraft Full Of Eels
  • 283,665
  • 25
  • 256
  • 373