2014-12-23 2 views
1

У меня есть кусок кода из простого приложения чата, но это не важная часть этого вопроса. Это часть кода, который, как мне кажется, должно быть недостижимым:Достижение кода после цикла java

while (!end) { 
      outputToServer.println(consoleInput.readLine()); 
     } 

     communicationSocket.close(); 

    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

@Override 
public void run() { // receiving message from other clients 

    String serverTextLine; 

    try { 
     while ((serverTextLine = inputFromServer.readLine()) != null) { 
      System.out.println(serverTextLine); 

      if (serverTextLine.indexOf("*** Goodbye") == 0) { 
       end = true; 
       return; 
      } 
     } 

    } catch (Exception e) { 

    } 

} 

То, что я не понимаю, как будет программа когда-либо достичь часть кода, в котором она устанавливает «конец» переменную к true, когда цикл while, который использует его как условие, перед ним ... Я полагаю, что это какой-то базовый java-материал, который я не помню, или что-то, что я настойчиво игнорирую :) Помогите, пожалуйста?

+2

Самое очевидное предположение, что какая-то другая нить попадает в выключатель здесь, устанавливая «конец» в true. Другое очевидное предположение состоит в том, что у вас будет «конец», установленный в блоке catch-to-write. (т. е. если вы потеряете соединение, просто отправьте «конец» и выйдите из цикла) –

+1

Это не «до». Те while-loops находятся в разных методах, и если вы переопределяете 'run()', вы, вероятно, делаете некоторые потоки. – azurefrog

+1

Да, существование '@ Override' над методом' run' является признаком того, что этот класс является либо «Thread», либо «Runnable», который будет использоваться потоком. Так что это почти наверняка многопоточный код, где один поток устанавливает 'end', а другой проверяет его. –

ответ

1

как код говорит управляющий достигнет линии

end = true; 

когда условие

serverTextLine.indexOf("*** Goodbye") == 0 

возвращает истину !,

это метод IndexOf (String) Возвращает: индекс подстроки внутри строки, если она существует, и возвращает -1, если не найден!

Случай, чтобы получить индекс «0» в качестве индекса, только когда строка начинается с подстроки. т.е. когда serverTextLine начинается с «*** Прощай».

+0

Да, но я не понял, как он когда-либо достигнет .indexOf, когда он постоянно проходит цикл до части кода, в котором он фактически меняет условие цикла: – dzenesiz

+1

программа напечатает некоторую строку как выводится всякий раз, когда вход не равен нулю. !! цикл while проверяет, является ли входная строка нулевой или нет, которая продолжается и печатает строку, если она не равна нулю. то он проверит входную строку indexOf на специальное слово, здесь прощай !! и если это специальное слово, то сам поток прекращает выполнение по мере его возвращения. –

Смежные вопросы