Wątek Runnable nie działa

0

Mam pewniem problem.
Otóż mam klasę

class Odbior implements Runnable
{
	public List list1;
	public Odbior() {}
	public void run()
	{
		while (true)
 		{
			try{
  				Socket s1 = new Socket ("localhost",1234);
 				InputStream s1In = s1.getInputStream();
  				DataInputStream dis = new DataInputStream(s1In);
  				String st = new String(dis.readUTF());
  				//dos.writeUTF(st);
  				System.out.println(st);
  				System.out.println("Test");
  				list1.add(st);
  				list1.add("------------------");
  
  				s1.close();
			}
			catch(IOException e)
			{
				//System.out.println("Błąd");
			}
		}
	}
}

Jednak nie działa jak powinna.
Chodzi o to żeby podczas odbioru tekstu od innego klienta ten tekst mi sie wyświetlał.
Teraz nic się nie dzieje, nawet słowo "Test" się nie wyświetla.
Klase uruchamiam

Odbior odp = new Odbior();
(new Thread(odp)).start();
0

Może odkomentuj IOException i zobacz, czy czegoś nie wyrzuca ...

0

Odkomentowałem i dalej lipa.
Nie wyrzuca tego "Błąd"

0

Widocznie ten inny klient nic nie wysyła.

0

Wysyła.
To nawet jakby nie wysyłał to napis "Test" powinien się wyświetlac

0

Oczywiście. Maszyna wirtualna się nie wyspała albo się zepsuła.
Gdy czytasz z tego strumienia, to program "czeka" aż coś otrzyma. Jeżeli nic nie dostaje, to czeka cały czas. Drukowanie "Test" jest po odbieraniu wiadomości. Dlatego się nie wykonuje.

0

Jak zwykle w przypadkach "nic sie nie wysyla, nie dziala" obstawiam ze nie ma flush().

0

Mam takie głupie pytanie ale po co w pętli za każdym razem nawiązujesz połączenia socketem ?
Może zrób coś w stylu:

Socket socket = new Socket ("localhost",1234);
InputStream input = socket.getInputStream();
while (!socket.isClosed() && socket.isConnected()) {
      int available = input.available();
      if (available > 0) {
            byte[] packet = new byte[available];
            input.read(packet, 0, available);
            String message = new String(packet);
            ....
      }
}
0
                while (true)
                 {
                        try{
                                  Socket s1 = new Socket ("localhost",1234);
                                 InputStream s1In = s1.getInputStream();
                                  DataInputStream dis = new DataInputStream(s1In);
                                  String st = new String(dis.readUTF());
                                  //dos.writeUTF(st);
                                  System.out.println(st);
                                  System.out.println("Test");
                                  list1.add(st);
                                  list1.add("------------------");
  
                                  s1.close();
                        }
                        catch(IOException e)
                        {
                                //System.out.println("Błąd");
                        }
                }

OUT ale jak ten fragment umieściłem do obsługi jakiegoś buttona to wszystko idealnie działało.
Nie mniej jednak obczaje jeszcze Twoje rozwiązanie

1 użytkowników online, w tym zalogowanych: 0, gości: 1