2011-09-15 3 views
3

이 코드는 포트가 열려 있는지 여부를 알려줍니다 (사용 가능한 기능). 그리고 GUI 프로그램에서 다음과 같은 함수를 호출합니다 :JTextField의 내용을 업데이트하여 모든 것을 새로 고쳐야합니까?

String newavail = "" + available(9002) ; 


JTextField tf1 = new JTextField("Is Port 9002(GWT Pet Store) available? \n" + newavail); 

실행중인 GUI 외부에서 포트를 닫으면이 변경 사항이 즉시 반영되지 않습니다. revalidate() 명령을 사용할 수 있다고 읽었지 만 어떻게 사용합니까?

+2

당신의 가장 큰 문제는 스윙하지 않습니다; 포트 9002 가용성이 변경 될 때 알림을 얻는 방법을 찾아야합니다. 그 포트의 가용성을 주기적으로 검사하는'Thread'를 생성하고 가용성이 변경된 경우 GUI를 업데이트해야합니다 (SwingUtilities.invokeLater()). – jfpoilpret

+0

@jfp - 고맙습니다. 매우 도움이됩니다. – Coffee

답변

3

이벤트 디스패치 스레드 외부에서 포트가 닫히면 을 사용하여 JTextField 인스턴스의 텍스트를 가용성 상태 변경을 반영하도록 설정해야합니다.


// we're outside the EDT 
SwingUtilities.invokeLater(new Runnable(){ 
    @Override 
    public void run(){ 
     // modify Swing component here 
    } 
}); 
+0

이것은 흥미 롭습니다. 그래서 멋진 SwingUtilities 클래스가 있습니다. 저는 고맙습니다, 감사합니다, – Coffee

+1

@Adel 그리고 특히 ['SwingUtilities.invokeLater (...)'] (http://download.oracle.com/javase/6/docs/api/javax)를 사용하십시오. /swing/SwingUtilities.html#invokeLater%28java.lang.Runnable%29). 편집을 참조하십시오! – mrkhrts

관련 문제