2016-07-18 47 views
0

我有个问题与该代码类型MainRender没有外围实例是可访问的

public static void main(String[] args) { 
    final GLProfile profile = GLProfile.get(GLProfile.GL2); 
    GLCapabilities capabilities = new GLCapabilities(profile); 

    final GLCanvas glcanvas = new GLCanvas(capabilities); 
    MainRender r = new MainRender(); 
    glcanvas.addGLEventListener(r); 
    glcanvas.setSize(700, 400); 

    final FPSAnimator animator = new FPSAnimator(glcanvas, 300, true); 

    final JFrame frame = new JFrame("Render"); 
    frame.getContentPane().add(glcanvas); 

    frame.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      if (animator.isStarted()) 
       animator.stop(); 
      System.exit(0); 
     } 
    }); 

    frame.setSize(frame.getContentPane().getPreferredSize()); 

    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    JPanel p = new JPanel(); 
    p.setPreferredSize(new Dimension(0, 0)); 
    frame.add(p, BorderLayout.SOUTH); 

    keyBindings(p, frame, r); 
    animator.start(); 

    Handler h = new Handler(); 

    p.addMouseListener(new Handler()); 
    p.addMouseMotionListener(new Handler()); 
} 

在处理程序H =新的处理程序(); Eclipse显示此消息

没有可以访问MainRender类型的封闭实例。必须使用封闭的MainRender类型实例来限定分配(例如,x.new A(),其中x是MainRender的一个实例)。

任何解决方案?

回答

0

问题是Handler是MainReader的非静态嵌套类。这意味着你需要一个MainReader的实例来实例化Handler。看看this stackoverflow的答案有关非静态与静态嵌套类的更多信息。

为了解决上述问题,或者你可以使处理程序类的静态(如果可以的话),或更换

Handler h = new Handler(); 

Handler h = r.new Handler(); 
相关问题