2016-07-18 7 views
0

나는이 코드 처리기 H = 새로운 핸들러에서없음 둘러싸는 인스턴스

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()); 
} 

()에 문제가 액세스 할 수 없습니다; Eclipse가이 메시지를 표시합니다.

MainRender 유형의 엔 클로징 인스턴스에 액세스 할 수 없습니다. MainRender 유형의 인 클로징 인스턴스 (예 : x.new A(), x는 MainRender의 인스턴스)로 할당을 한정해야합니다.

모든 솔루션?

답변

0

문제는 Handler가 MainReader의 정적이 아닌 중첩 클래스라는 점입니다. 즉, Handler를 인스턴스화 할 수 있으려면 MainReader 인스턴스가 필요합니다. 비 정적 대 정적 중첩 클래스에 대한 자세한 내용은 this stackoverflow 대답을보십시오.

는 위에서 언급 한 문제점을 해결하기 위해, 하나는 (당신이 할 수있는 경우) 핸들러 클래스의 정적을 만들거나 대체 할 수

Handler h = new Handler(); 

Handler h = r.new Handler();