2017-11-15 5 views
1

이 오류를 얻을ActionListener에서 로컬 변수를 초기화하는 방법은 무엇입니까?</p> <blockquote> <p>Local variable word defined in an enclosing scope must be final or effectively final.</p> </blockquote> <p>코드는 다음과 같은 : - 내가하는 ActionListener의 지역 변수를 초기화하려면 자바

int number = 0; 

anyButton.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 

     //And here I get the error: 
     number++; 

    } 
}); 

당신이 그것을 수행하는 방법을 알고 계십니까?

+1

나는대로 깃발이 않을거야 질문이 약간 다르기 때문에 중복되었지만 이것이 왜 여기에 해당하는지에 대한 해결책과 이유가 있습니다. [익명의 클래스에서만 최종 변수에 액세스 할 수있는 이유는 무엇입니까?] (https://stackoverflow.com/questions/4732544/why- 익명 - 클래스에서 접근 가능) –

+0

Ok! 나는 그 질문을 보지 못했다. 죄송 해요! – Andy

답변

1

원시 변수가 아닌 가변 스레드 안전 변수가 필요합니다.

은 래퍼 클래스 중 하나에 의해 그 원시적 인 교체를 고려 (자신, 또는 표준 하나가 될 수있다 [예 : AtomicInteger]) 또는 단일 요소의 배열 :

final AtomicInteger number = new AtomicInteger(); 
... 
number.getAndIncrement(); 
+0

숫자는 다음과 같아야합니다 :'AtomicInteger word = 0;'? 그게 작동하지 않습니다 ... – Andy

+1

@ 앤디, 예를 제공했습니다. 참조 유형에 프리미티브를 할당 할 수 없습니다 (boxing/unboxing이있는 마법은 제외). – Andrew

관련 문제