2013-12-02 3 views
0

мой компьютер, кажется, падает, когда я пытаюсь отправить объект с сервера, строка 27 пытается получить объект, я думаю, что получил недопустимый код типа: 0 один раз, но обычно просто сбой, поэтому мне приходится перезапуститьObjectInputStream вызывает сбой

  new Thread(){ 
      public void run(){ 
       boolean sent = false; 
       boolean threadStarted = false; 
       while(true){ 
        if(game.changedTurns){ 
        System.out.println(game.changedTurns); 
        if(!sent){ 
         try{ 
          System.out.println("attempt to send from player"); 
          out.writeObject(game.getSquareColors()); 
          System.out.println("sent"); 
          sent = true; 
          //Thread.sleep(500); 
          sent = false; 
          } 
          catch(Exception ex){ 
           System.out.println("player1 " +ex.getMessage()); 
          } 
          } 
         }if(!threadStarted)      
          threadStarted = true; 
          new Thread(){ 
          public void run(){ 
           while(true){ 
            try{ 
             Object ob = in.readObject(); // line 27 

             System.out.println("Player received"); 
            } 
            catch(Exception e){ 
             System.out.println("player2 "+e.getMessage()); 
            } 
           } 
          } 
         }.start(); 
        } 
       } 
      }.start(); 
     } 

объект отправляется на сервер от другого клиента, сервер получит и пытается отправить объект в строке 16:

class Opponent implements Runnable{  
    ObjectInputStream in2; 
    ObjectOutputStream out; 
    Opponent(ObjectInputStream in2, ObjectOutputStream out){ 
     this.in2 = in2;                //from opponent to player 
     this.out = out; 
    } 
    public void run(){         
     while(true){ 
      try{ 
       System.out.println("from opponent to server waiting"); 
       Object o2 = in2.readObject(); 
       if(o2 instanceof Color[]){ 
        System.out.println("fee"); 
        out.writeObject(o2);     //line 16 
        out.flush(); 
       } 
      } 
      catch(Exception e){ 
       System.out.println("S2 " +e.getMessage()); 
      } 
     } 
    } 
} 

}

+0

У вас есть stacktrace? Или это не авария jvm? –

+0

Похоже, у вас есть лишнее 'sent = false' прямо под' sent = true'. Не думайте, что это вызывает вашу проблему, но это может быть проблемой позже. – DoubleDouble

+0

Я думаю, что это авария jvm, поскольку я думал, что однажды увидел «недопустимый тип кода: 0», но обычно мой компьютер падает, и я думаю, что он не достигает catch –

ответ

1

объектов ввода/вывода потоков ами заканчивает некоторые заголовки друг к другу, прежде чем начать передавать объект, поэтому моя рекомендация в конце 1 создает сначала выходной поток, а в конце 2 создает входной поток, а затем в конце 1 создает входной поток, а в конце 2 создает выходной поток или наоборот
Компьютерный сбой кажется очень странным результатом, этот обычный поток ввода-вывода объекта пропускает использование

+0

Потоки уже настроены так –

+0

Это когда вы создаете потоки . У меня когда-то была проблема, когда мой поток объектов просто не работал, и после небольшого копания я обнаружил проблему: на стороне клиента я создаю вывод, затем вводим на стороне сервера то же самое после переключения (на выходе клиента, затем вводят и на входе сервера, а затем на выходе) все сработало будет –

+0

Да, потоки создаются вот так: –

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