У меня есть следующий код:Почему этот break break не работает?
public void post(String message) {
final String mess = message;
(new Thread() {
public void run() {
while (true) {
try {
if (status.equals("serviceResolved")) {
output.println(mess);
Game.log.fine("The following message was successfully sent: " + mess);
break;
} else {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
} catch (NullPointerException e) {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
}
}
}).start();
}
В моем файле журнала я нахожу много линий, как это:
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
И моя программа не отвечает.
Мне кажется, что команда break
не работает. Что может быть причиной этого.
Интересно, что это происходит не все время. Иногда моя программа работает нормально, иногда возникает описанная выше проблема.
FWIW: вы можете разделить две строки Thread.sleep() на одну строку, выполненную после самой последней попытки/catch. –
Поймать «NullPointerException» не кажется отличной идеей (нужно ли проверять, является ли «статус == null» - если это так, проверьте, является ли «статус» «нулевым»).И 'InterruptedException' должно быть сделано, чтобы вырваться из цикла (не то, что мне нравится прерывание потока, но оно есть и поэтому должно быть рассмотрено)./Также вы можете сделать параметр 'final', поэтому вам не нужна копия' mess'. –
Это явная причина того, почему вы не должны замолчать исключение, если вам действительно не нужно это делать: отладка становится адской. – Jack