2013-01-15 2 views
0

Java 소켓 스윙 응용 프로그램을 만들고 있습니다. 이 무효를 만들었습니다 :Java 소켓 스윙 응용 프로그램 충돌이 발생합니다.

서버에 두 번째 메시지를 보내려고하면 프로그램이 막히게됩니다. 누군가 내 코드에 대한 권장 사항을 제공 할 수 있습니까? 감사!

P.

sendMessage()JButton의 경우 MouseLisitener에 의해 트리거됩니다.
System.err에 대해 PipeStream이고 JTextArea에 해당합니다.
이 아웃과 관련하여/무엇이고 있습니다

try { 
    connection = new Socket(ipa, port); 
    out = new PrintWriter(connection.getOutputStream(), true); 
    in = new BufferedReader(new InputStreamReader(connection.getInputStream()))); 
} 
... 
+0

공백 부분을 삭제하고 마우스 수신기에 넣고 메시지를 보낼 때마다 각각 열고 닫습니다. – user1978786

+0

다시 'void 부분'은 무엇입니까? 우리는 마음을 읽을 수 없다고 가정하십시오. –

+0

참고로 다음은 전체 작업 [예제] (http://stackoverflow.com/a/3245805/230513)입니다. – trashgod

답변

0

... 당신 요구 사항이 정확히 무엇에 와서 마우스 수신기에 넣어 것이다 구현 열고 연결에게 내가 메시지를 보낼 때마다 폐쇄하는 방법. 이로 인해 프로그램 충돌이 방지되었습니다. 실수를 저를 도와 주셔서 감사합니다.

3

문제 :

  • 왜 정적 방법은? 정당한 이유가없는 한 모든 통계학을 피해야하며, 여기에는 통계학이 없습니다.
  • 스레딩을 어떻게 처리하는지는 언급하지 않았으며, 아마도 이것이 문제의 원인 일 가능성이 높습니다. 백그라운드 스레드 생성을 위해 SwingWorker를 사용하고 있습니까? Swing 이벤트 스레드에서 모든 Swing 호출을 처리하는 데주의를 기울이고 있습니까?
  • JButton을 사용하는 것이 좋지 않은 MouseListener를 사용한다고 명시합니다. JButton은 ActionListeners에 가장 잘 응답 할 수 있도록 제작되었습니다. 그러면 JButton의 상태를 시각적으로 변경하고 JButton을 비활성화하여 해당 동작을 비활성화 할 수 있습니다. 이에 대한 자세한 내용은 Oracle Swing Tutorial Button 섹션을 읽는 것이 좋습니다.
+0

정적 메소드를 사용합니다. public static void main (String [] args) {...} – user1978786

+1

+1 버튼과'MouseListener'에 대해 - 그 것을 놓친 것 : P – MadProgrammer

+0

@ user1978786 : 정확히 - 당신은 main 메소드에서 어떤 종류의 일도해서는 안됩니다. main 메소드는 클래스를 설정하고 GUI를 표시하는 것 이상을 수행해야합니다. 이 프로젝트에 큰 문제가 있습니다. –

3

Event Dispatching Thread 컨텍스트 내에서 잠재적으로 블로킹 I/O를 호출하는 것처럼 들립니다. 이것은 결코 좋은 생각이 아닙니다. EDT를 차단하는 요소는 (다른 것들 사이에서) 요청을 다시 칠하고 EDT가 마우스와 키보드 이벤트를 처리하는 것을 멈추게합니다 ...

UI (생성 및 수정)와의 모든 상호 작용은 EDT의 맥락에서 수행되어야한다. 귀하의 경우에는

난 당신이 몇 가지 배경에 대한 Concurrency in Swing을 살펴 제안 ...

, 당신은 소켓을 통해 데이터를 전송 및 수신 할 수 Thread 또는 배경 노동자의 어떤 종류를 필요로하기 위하여려고하고있다 . 이렇게하면 진행중인 메시지를 대기열에 넣고 EDT를 차단하지 않고 결과를 처리 할 수 ​​있습니다.

하지만 실제로 내가 빈 부분을 삭제

+0

16 초 후에 뛰십시오! 1 + –

+0

@HovercraftFullOfEels 세부 정보에 걸려 들었습니다. P – MadProgrammer

관련 문제