2011-09-10 9 views
2

문제와 관련,방법 - 자바 스레드 다른 스레드 액세스 (SWING)

내가 주 응용 프로그램에서 스레드를 시작 프로세스 A는 백그라운드에서 실행 말할 수와 그것의 말을 실 외부의 텍스트 상자를 업데이트 실행이 중지되면 실행되고 완료됩니다.

실행중인 스레드 내에서 스레드 외부의 텍스트 상자를 업데이트하는 코드는 어떻게 작성합니까?

답변

3

텍스트 상자에 대한 포인터가 필요합니다. 스레드 수 없습니다 텍스트 상자를 업데이트 - 스윙에서 모든 GUI 명령은 이벤트 발송 스레드에서 실행해야합니다.

당신이 수행해야합니다 단지 팁 :

SwingUtilities.invokeLater (new Runnable(){ 
    public void run(){ 
     // draw textbox code 
    } 
}); 

이 이벤트 발송 쓰레드

편집에 의해 실행 큐에 개체를 추가합니다 를 새로운의 Runnable() {내부에 .. .}는 익명 클래스이므로 외부 범위의 일반 변수를 사용할 수 없습니다. 변수를 final로 정의하거나 getter를 사용하여 텍스트 상자를 가져 오거나 일부 정적 필드를 통해 주소를 지정해야합니다.

+0

어떻게 양식에 이미 그려져있는 텍스트 상자 속성을 호출합니까? – Melvin

+0

오. 팁 고마워. runnable 클래스 내에서 정적 참조를 만들고 gui에서 텍스트 상자를 연결합니다. 같은 : Test.txt = jTextArea1 및 테스트 실행 내, 난 그냥 텍스트를 설정하려면 txt.setText() 사용하고 작동합니다. – Melvin

+0

정적 일 필요는 없습니다. (익명 및 명명 된) 내부 클래스는 외부 클래스의 상태에 액세스 할 수 있습니다. – jackrabbit