私は自分の研究でイベント駆動型プログラミングのためにJavaで戦艦ゲームを書いています。ゲームはネットワークゲームであると想定されており、1つのアプリケーションでクライアントとサーバーを作成します。
これは私のアプリケーションの構造を表す画像です: クラス図http://dl.dropbox.com/u/41993645/mvc.jpeg
要点を理解するために-私は別のスレッドとして実行され、リモートビューを担当するサーバークラスを書きたい-コントローラー通信。したがって、Serverクラスは次の責任を負います。
- 無限ループでソケットからオブジェクトを読み取り、到着した場合は、コントローラーのBlockingQueueに入れます。
- 'sendActionEventToView()'のようなメソッドを提供します。これにより、コントローラーはオブジェクトを別の方法(コントローラーからリモートビュー)に渡すことができます。
残念ながら、サーバースレッドを実行すると、アプリケーション全体が応答を停止します。誰かが私が間違っていることを教えてくれたら、私はとても感謝しています。これは私の意見では、サーバーコードの問題のある部分です。
/** Main Server method - responsible for reading objects
* and putting them in the queue if any arrived */
public void run() {
GameEvent event;
while(true) {
try {
event = (GameEvent)objectStream.readObject();
if(event != null) eventQueue.put(event);
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(IOException e1) {
e1.printStackTrace();
} catch(InterruptedException e2) {
e2.printStackTrace();
}
}
}
スレッドは「readingObject()」でハングしていると思います-ストリームにオブジェクトがない場合、どうすればプロセッサに別のスレッドに時間を与えるように強制できますか?
サーバーの残りの部分:https ://github.com/mc-suchecki/Battleships/blob/master/controller/Server.java アプリの残りの部分:https ://github.com/mc-suchecki/Battleships
よろしくお願いします。不明な点がございましたら、コメントをお願いします。そして、私の英語でごめんなさい。