2017-05-29 3 views
0

Ich versuche, eine Tasche zu senden und wenn die Antwort "!" Vor 3 Sekunden ist. Dann wird es eine Benachrichtigung geben.Wait Methode funktioniert nicht

Wenn ich jedoch "!" Erhalte, bricht die Warte-Methode ab und funktioniert nicht mehr.

der Faden while (true) Um dieses Problem machen, und ich weiß nicht, wie es beheben

Test datagram; //its current class 
DatagramSocket ds; 
String adress; 

private final Object monitor = new Object(); 

//send masage 
void send(String str, String adress) throws IOException { 
    synchronized (monitor) { 
     datagram = this; 
     this.adress = adress; 
     ds = new DatagramSocket(3333); 
     DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName(adress), 3333); 
     try { 
      ds.send(dp); 
      receive.start(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     try { 
      monitor.wait(3000); 
      System.out.println("send"); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Thread receive = new Thread() { 
    public void run() { 
      synchronized (datagram.monitor) { 

      while (true) {//this while make problem 
       DatagramPacket dp = new DatagramPacket(new byte[2048], 2048); 
       try { 
        ds.receive(dp); 
        String data = new String(dp.getData(), 0, dp.getLength()); 
        if (data.equals("!")) { 
         System.out.println(data); 
         this.join(); 
         datagram.monitor.notify(); 
        } else { 
         ds.send(new DatagramPacket("!".getBytes(), 1, InetAddress.getByName(adress), 3333)); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
}; 

ich diesen Code laufen auf zwei Computer Computer ein. neuen Test (mit) ("salam "," 192.168.1.103 "); Computer zwei: neuer Test();

Antwort

0

Dieses Problem tritt Thread Cues nicht erkennen, Schloss

Thread receive = new Thread() { 
    public void run() { 
     while (true) { 
      DatagramPacket dp = new DatagramPacket(new byte[2048], 2048); 
      try { 
       ds.receive(dp); 
       data = new String(dp.getData(), 0, dp.getLength()); 
       if (data.equals("!")) { 
        synchronized (datagram.monitor) { 
         datagram.monitor.notify(); 
        } 
       } else { 
        ds.send(new DatagramPacket("!".getBytes(), 1, InetAddress.getByName(adress), 3333)); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
};