好了,所以我創建一個相當簡單的Java應用程序,它最終會變成一個在線2玩家德州撲克遊戲。現在,我試圖通過網絡發送一些簡單的消息,以確保基本功能正常。然而,我卡住了。While循環不能繼續 - 插座
我有一類兩種方法。一個用於服務器端(或者實際上是客戶端和服務器之間的混合),另一個用於客戶端。他們連接在一起很好。當我提出這個問題,我注意到,當我連接,他們都垃圾郵件的默認消息(現在是「客戶:入門」和「服務器:啓動」來回海誓山盟我想這是因爲包含該信息的串是從來沒有清空,所以他們從來不知道什麼時候該停止發送它。然後,我確信,發送消息之後,該變量被清零,並檢查是爲了看它是否在發送之前爲空。 在此處,它雖然出了問題!這樣做後,他們將不再發送多條消息都沒有。他們發送其各自的歡迎訊息,但任何事情我嘗試被忽略後進行傳輸。這就像如果while循環用於服務器/客戶端停止。
所以,我在班上兩個公共變量聲明。這些文件包含的任何消息的服務器或客戶端要發送。
public static String serverCommand = null;
public static String clientCommand = null;
他們默認爲空,但在GUI部分運行時改變。 服務器循環如下所示:
while(true)
{
if((receive = receiveStream.readLine()) != null)
{
System.out.println(receive);
}
if(serverCommand != null)
{
printer.println(serverCommand);
printer.flush();
Network.serverCommand = null;
}
}
而且客戶端,而這樣的循環:
while(true)
{
if(Network.clientCommand != null)
{
printer.println(clientCommand);
printer.flush();
Network.clientCommand = null;
}
if((receive = receiveStream.readLine()) != null)
{
System.out.println(receive);
}
}
然而,如前所述 - Network.clientCommand
設置爲圍繞空後的第一時間,它永遠不會再次發送任何消息,即使Network.clientCommand
由於在運行時期間的用戶輸入而改變。
我會發布兩個鏈接到客戶端/服務器的完整源代碼 - 下面這部分,因爲它們有點太大,無法粘貼到這裏。
LINK:http://hastebin.com/oqotirufic.java
沒有人在這裏有任何想法發生了什麼,我應該怎麼想試圖修復/繞過它什麼時候?我會補充一點,我在Java和網絡編程方面的經驗非常有限。
編輯
我將添加這acccesses GUI的一部分/改變的變量。 http://hastebin.com/upadayuwug.java
'Network.clientCommand'設置爲任何值!= null? – PeterMmm 2014-11-24 15:48:14
clientCommand如何改變? – Morad 2014-11-24 15:51:02
它們都通過GUI進行更改。它在一個不同的階級。 我知道他們都改變了,因爲如果我在上面的例子中刪除設置爲null,他們都改變(但明顯保持垃圾郵件) **編輯** 在主文章中添加了GUI部分。 – CmdrSharp 2014-11-24 15:54:24