2015-04-23 6 views
-3

Im вызывая ObjectInputStream все время в то время как петля с утверждением истинного:Java Socket - ObjectInputStream

while(true){ 

      //send data 

     } 

, но в момент, когда закрытие сокета, ObjectInputStream и отдыха я получил несколько исключений гнездо закрыто (actualy потому что я закрыть его) ,

Вопрос: какое заявление я могу установить во время цикла для проверки ObjectInputStream не закрыт?

Edit: Socket.isConnected() не дают хорошего результата

весь метод

private void dataTransfer(){ 
    try { 
     while(!con.isClosed()){ 
       String message = (String) input.readObject(); 
       ChatWindow.getMessage(message); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+3

Пожалуйста, покажите немного больше кода, чтобы мы могли видеть, что вы делаете с сокетом, входным потоком и т. Д. – DNA

+0

Im закрывающие сокеты, ввод, вывод в окне JFrameClosing, но этот цикл while все равно выполняется один раз. есть ли возможность получить это исключение? – Periit

ответ

0

Ваша проблема вероятно многопоточности асинхронными.

В то время как while проходит за пределами EDT, windowClosing() проходит внутри. Поэтому он может проверить isClosed() до того, как на самом деле был вызван windowClosing(), и после этого выполнить код цикла.

Как и в подобных случаях, лучше всего использовать синхронизацию, но это не лучшая идея в EDT. Используйте новый поток в методе windowClosing(), который закрывает поток и синхронизирует его.

+0

как только мы вызываем input.readObject(), он все время ждет получения фактического ввода, да? поэтому фактически невозможно реализовать исключение, потому что даже если Socket закрыт, мы все еще ждем ввода, а затем рушимся ... я ошибаюсь? – Periit

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