Итак, я создаю довольно простое приложение для Java, которое в конечном итоге превратится в онлайн-игру с двумя игроками в техасский холдем. Прямо сейчас, я пытаюсь отправить несколько простых сообщений по сети, чтобы убедиться, что основные функции работают. Однако я застрял.Пока цикл не продолжается - гнездо
У меня есть два метода в классе. Один для серверов (или действительно гибрид между клиентом и сервером) и один для клиентов. Они соединяются вместе хорошо. Когда я это сделал, я заметил, что когда я подключился, они оба спамали сообщения по умолчанию (сейчас это «КЛИЕНТ: Started» и «SERVER: Started» взад и вперед друг к другу. Я понял, что это потому, что строка, содержащая эту информацию, была никогда не были опустошены, и поэтому они никогда не знали, когда прекратить передавать его. Затем я убедился, что после отправки сообщения эта переменная была обнулена, и была сделана проверка, чтобы проверить, было ли оно пустым до отправки. Вот где это пошло не так, хотя После этого они не отправят больше одного сообщения. Они отправляют свои соответствующие приветственные сообщения, но все, что я пытаюсь передать после этого, игнорируется. Это почти похоже на остановку while-loop для сервера/клиента.
Итак, у меня есть две общедоступные переменные, объявленные в классе. Они содержат любое сообщение, которое отправляет сервер или клиент.
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 и сетевым программированием очень ограничен.
EDIT
Я добавлю часть GUI, которая acccesses/изменения переменных.
Где находится 'Network.clientCommand' для чего угодно? = Null? – PeterMmm
Как изменяется клиентский интерфейс? – Morad
Они оба изменены через графический интерфейс. Это в другом классе. Я знаю, что они оба изменены, поскольку, если я удалю настройку в нуль в приведенном выше примере, они оба изменяются (но, очевидно, сохраняют спам). ** Редактировать ** Добавлена часть GUI в главном сообщении. – CmdrSharp