Client-Thread таинственным образом пропускает Java-код, поэтому не отвечает - PullRequest
0 голосов
/ 07 декабря 2018

Каждая строка кода выполняется -> Событие -> Пропущены важные строки кода Java

# Клиент-сервер # AssumeNoCodeOptimization # IDE: Обработка ( Processing.org с помощью MIT)

Существует поток «ConnectionHandler», который находится в цикле, где он либо отправляет, либо получает данные.Перед получением первых данных выполняется каждая строка кода.После этого программа , кажется, останавливает в System.out.println () !?Затем, когда поступает больше данных, определенные строки Java-кода снова выполняются , но тот же самый System.out.println () - помимо прочего, который я упоминал ранее, пропускается.

Самой проблемой является , на самом деле метод sendOutput () пропущен .Это то, что действительно размалывает мои механизмы.Пожалуйста помоги.

Я программирую в среде, называемой Processing, разработанной MIT.Насколько я знаю, это только оборачивает больше Java-кода вокруг вашего кода.

Ниже в следующих фрагментах кода я объясню, почему я думаю, что оптимизация кода с помощью JIT или AOT не является проблемой (В конце я думаю, что ябудет неправильно. Я надеюсь, что наоборот, потому что вы не можете передать Системные переменные в Обработку, чтобы подавить оптимизацию)

  private void runConnectionHandler() {
    final BufferedReader inFromClient = getBufferedReader(socket);
    final DataOutputStream dataOutputStream = getDataOutputStream(socket);
    while (true) {   
      getInput(inFromClient);
      sendOutput(dataOutputStream);
      System.out.println("Cycle ends");
    }
  }


  private void getInput(final BufferedReader input) {
    System.out.println("Get");
    try {
      String clientSentence = null;
      if (input.ready()) {
        while ((clientSentence = input.readLine()) != null) {
          inputQueue.add(new GameData(clientSentence));
          System.out.println("Received se: \"" + clientSentence + "\"");
          System.out.println("1");
        }
        System.out.println("2");
      }
      System.out.println("3");
    } 
    catch (final Exception e) {
      e.printStackTrace();
    }
  }

  private void sendOutput(final DataOutputStream dataOutputStream) {
    System.out.println("Send");
    while (outputQueue.peek() != null) {
      try {
        String out = outputQueue.poll().toString();
        dataOutputStream.writeBytes(out + "\r\n");
        dataOutputStream.flush();
        System.out.println("Sent \"" + out + "\"");
      } 
      catch (final Exception e) {
        e.printStackTrace();
      }
    }
  }

ВЫХОД: Перед первыми данными:

Не имеяИдея об оптимизации Я думаю, что она также должна вступить в силу здесь, но это не так?

...
Get
3
Send
Cycle ends
...

ВЫХОД: Первые данные прибывают

После "1"выход прекращается.Почему System.out.println ("2"); и т. Д. Не выполняется ?!Почему это останавливается?!?!

...
Get
3
Send
Cycle ends    
Get
Received se: "SET PLAY MODE"
1

ВЫХОД: Вручную отправлено больше данных

Gad dayium, я имею в виду, куда пошла моя система.out.println ("Получить"); и все?!

...
Get
Received se: "SET PLAY MODE"
1
Received se: "Hey Ho1"
1

ВЫХОД: Сервер выключается

Когда я выключаюсьс другой стороны (сервер), каждая строка кода выполняется снова?!?!Кроме того, ни это не останавливается, ни выполнение не брошено (Но, возможно, другая проблема).

...
Get
3
Send
Cycle ends
...

Также, если моя концепция сильно нарушена, я буду признателен за множество подсказок.

...