У меня есть этот код:Как проверить, закрыт ли выходной поток сокета?
public void post(String message) {
output.close();
final String mess = message;
(new Thread() {
public void run() {
while (true) {
try {
output.println(mess);
System.out.println("The following message was successfully sent:");
System.out.println(mess);
break;
} catch (NullPointerException e) {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
}
}
}).start();
}
Как вы можете видеть, что я закрыть сокет в самом начале кода, а затем try
использовать его, чтобы отправить информацию на другой компьютер. Программа пишет мне «Сообщение успешно отправлено». Это означает, что исключение NullPointerException не было выбрано.
Итак, делает ли Java исключение, если пытается использовать закрытый выходной поток сокета? Есть ли способ проверить, закрыт или открыт сокет?
ДОБАВЛЕНО
Я инициализировать сокет следующим образом:
clientSideSocket = new Socket(hostname,port);
PrintWriter out = new PrintWriter(clientSideSocket.getOutputStream(), true);
browser.output = out;
Где декларация о выходе? Как это инициализируется? Исключением, которое должен сделать ваш код, является не NullPointerException, а IOException. –
Я добавил код, который я использую для инициализации сокета. Андреа, ты говоришь, что нужно исключить IOException. Но это не брошено. Зачем? – Roman
Не знаю. Из источника PrintWriter это должно быть. Единственная проблема, о которой я могу думать, это какая-то проблема синхронизации (вы закрываете автора в потоке и используете его в другом, возможно, исполняете в другом ядре), но я не очень разбираюсь в этой области. EDITED: попытайтесь переместить создание PintWriter внутри потока. –