2011-08-16 7 views
4

소켓이있는 서버에 이미 연결되어있는 동안 패널을 만들려고하지만 자바에서는 프레임을 표시하지만 프레임에는 표시되지 않습니다. 패널은 소켓이 닫힌 후에 만 ​​표시되지만 열리는 동안 필요합니다. 이 문제를 어떻게 해결할 수 있습니까? 그것은 스레드 문제 때문에 또는 뭔가를 놓친 것입니다 .... 감사 ...자바 소켓이 패널을 차단합니까?

+6

난 당신이 어떤 소켓 작업에 차단하고 상쾌한에서 GUI를 방지하기 때문에 그것의 생각한다. 몇 가지 코드를 보여 주시겠습니까? – cnicutar

+0

큰 프로젝트이며 func의 예외입니다. Jframe을 생성하고 표시하려고했습니다. 나 또한이 함수에 대한 새로운 스레드를 만들려고 시도했지만 같은 상황. –

+0

print 문을 사용하여 JFrame을 생성하는 코드가 실제로 호출되는지 여부를 확인합니다. 소켓이 닫힌 후에 나타나기 때문에, 이것은 대개 스레딩 이슈입니다. –

답변

5

장기 실행 작업은 절대로 EDT에서 발생하지 않아야합니다. 여기에는 I/O 작업 차단이 포함됩니다. 그러한 태스크가 Swing 컴퍼넌트를 변경하지 않는 경우에는, 다른 thread를 사용하면됩니다. 그렇지 않으면 다른 스레드에서 장시간 실행되는 작업을 수행 할 수있는 유틸리티 (예 : SwingWorkerSwingUtilties)가 있으며 그 결과를 EDT의 조치 이벤트로 게시하여 Swing 구성 요소를 수정할 수 있습니다.

은 참조 :

+0

for'invokeLater()'+1 – mKorbel

+0

설명 주셔서 감사합니다 ... 나는 내일 그것을 시도 할 것입니다. 나는 그것이 효과가 있기를 바랍니다 :) –

관련 문제