【问题标题】:No enclosing instance of type MainRender is accessible无法访问 MainRender 类型的封闭实例
【发布时间】:2016-11-20 19:09:30
【问题描述】:

这段代码有问题

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 = new Handler(); Eclipse 显示此消息

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

有什么解决办法吗?

【问题讨论】:

    标签: java jogl


    【解决方案1】:

    问题在于 Handler 是 MainReader 的非静态嵌套类。这意味着您需要一个 MainReader 实例才能实例化 Handler。查看thisstackoverflow 答案,了解有关非静态与静态嵌套类的更多信息。

    要解决上述问题,您可以将 Handler 类设为静态(如果可以)或替换

    Handler h = new Handler();
    

    Handler h = r.new Handler();
    

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2013-04-11
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2013-02-17
      相关资源
      最近更新 更多