Я пишу игру Battleships в Java для управляемых событиями программ на моих занятиях. Игра должна быть сетевой игрой, и я собираюсь сделать клиент и сервер в одном приложении.Java - создание отдельной темы для отправки объектов через Интернет
Это изображение, представляющее собой структуру моего приложения: class diagram http://dl.dropbox.com/u/41993645/mvc.jpeg
Чтобы добраться до точки - я хочу написать класс сервера, который будет работать, как отдельный поток и несет ответственность за удаленным видом - связи контроллера. Таким образом, класс сервера будет нести ответственность за:
- Чтение объектов из сокета в бесконечном цикле и если приходит, положить их в 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
Большое спасибо заранее, если что-то неясно, пожалуйста, комментарии. И извините за мой английский.
Вам нужно будет опубликовать несколько примеров сжатого кода, прежде чем большинство ответит. Я предлагаю вам добавить дополнительную отладку 'println' или использовать отладчик, чтобы выяснить вашу проблему. – Gray
Спасибо, я отправил проблемный код. Я пробовал отлаживать, но мои знания позволили мне просто найти проблему, но, к сожалению, не решить ее. –
Вы начинаете один поток на одного клиента или читаете с одного клиентского соединения за раз? – Gray