2011-11-26 55 views
0

我正在製作一個應用程序,其工作方式與實時聊天非常相似。用戶會不斷寫作,讓我們說一個文本區域,並將消息發送給其他用戶。在通信班上,我設立了一個接收器。當某人的消息到達客戶端時,將調用receive方法並獲取消息。我不明白的是代碼將如何執行。如果在用戶輸入/發送消息時調用接收消息,會發生什麼?我需要做什麼才能使其正常工作? 希望這個問題很清楚。處理Java Interupts

ps:我仍然處於設計階段,這就是爲什麼我沒有測試它看看會發生什麼。 atm我只使用第二個線程來接收調用接收方法的消息。

+0

你能描述一下「用戶在輸入/發送信息時」的含義嗎?這是一個控制檯模式程序嗎?如果它是一個GUI程序,那麼你將使用某種事件驅動的框架,所以沒有「while」。您只需獲取用戶按鍵事件,然後決定如何處理每個事件。 –

回答

0

應該沒有問題。

當某人的消息到達客戶端時,將會調用接收方法 並將獲得該消息。我不明白的是 代碼將如何執行?

您應該有一個Receiver類來封裝套接字(從中接收數據)並保留一組偵聽器(請參閱Observer pattern)。 GUI可以是聽衆之一。當通過套接字接收到消息時,您需要通過轉發收到的數據來通知所有聽衆。這樣,你就有了一個乾淨而好的方式來通知GUI關於新消息的到達。

如果在用戶輸入/發送消息時調用接收消息 會發生什麼?

這取決於你使用的IP協議的類型,但一般你不必擔心這個,雖然我建議你使用lock機制保護您的插座。

我需要做些什麼才能使其正常工作? 這裏是一個很好的example,可以給你一些啓發:)

編輯:至於你的問題關於執行流程,發送和接收都可以在同一時間發生兩個不同且不相關的操作。這可以通過在兩個不同的線程中實現發送和接收操作來實現。這是一個article套接字通信和多線程。

+0

我主要關心的是執行流程會發生什麼。例如,當應用程序正在發送消息的過程中,並且接收方法被調用時,將停止發送消息並顯示新消息,然後發送繼續或將發送消息並顯示新消息以後還是會讓應用程序崩潰並得到一些異常? – Giannis

+0

剛剛編輯我的答案,請看看它。 – GETah

+0

感謝您的回覆。我還有最後一個問題。是否有可能這樣做:收到消息時,應用程序停止任何操作,用新消息更新GUI或任何必須完成的操作,然後返回到之前的操作。我在(客戶端 - 服務器)之前使用線程完成了一些編程,但沒有太複雜。再次感謝 ! – Giannis

0

您應該執行傳統Java EE應用程序服務器所做的操作,即爲每個傳入消息分配一個單獨的線程,或嘗試沿着Netty的線路嘗試Java NIO解決方案。

+0

傳入消息將被簡單地讀取併發送到正確的面板以顯示它們。將顯示傳入消息的同一個面板將接收要發送消息的輸入。此操作需要兩個線程? – Giannis