我正在設計一款網絡遊戲,因此我有一個客戶端,其中一個監聽線程來自服務器,而服務器也有一個監聽線程正在監聽來自客戶端的消息。有關多線程編程的賽車場景
在客戶端面板我下面的一個:發送一些信息給服務器
後來自同一個地方的兩行代碼與其他功能再次這樣做。
結果是有時運行良好並且有時會拋出異常的代碼運行。 在客戶端面板上的某個發送函數的行處拋出異常。
注:如果我把Thread.sleep(1000);
兩者之間發送比不會拋出異常,但你知道這是一個壞的解決方案..
*發送信息,以獨一無二的服務器線程的兩個功能是:
ClientCommunicationThread.UpdateServerOfTimeEnded
ClientCommunicationThread.SendRequestToClosePlayerThreadAndRemoveItFromPlayersOnServer
我怎樣才能解決這個問題
感謝。
這是堆棧跟蹤:
java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:115) at java.io.DataOutputStream.writeInt(DataOutputStream.java:181) at GUI.ClientCommunicationThread.UpdateServerOfTimeEnded(ClientCommunicationThread.java:850) at GUI.JPanelMainGame$2.actionPerformed(JPanelMainGame.java:312) at javax.swing.Timer.fireActionPerformed(Timer.java:271) at javax.swing.Timer$DoPostEvent.run(Timer.java:201) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:115) at java.io.DataOutputStream.writeInt(DataOutputStream.java:180) at GUI.ClientCommunicationThread.SendRequestToClosePlayerThreadAndRemoveItFromPlayersOnServer(ClientCommunicationThread.java:824) at GUI.JPanelMainGame$2.actionPerformed(JPanelMainGame.java:325) at javax.swing.Timer.fireActionPerformed(Timer.java:271) at javax.swing.Timer$DoPostEvent.run(Timer.java:201) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+1,用於堆棧跟蹤 – doNotCheckMyBlog