Gå til innhold

Lock og condition: IllegalMonitorStateException


Anbefalte innlegg

Jobber med et lite chat-program og har støtt på et problem i Client-klassen. Jeg har én tråd for å lytte til input og en annen for output. Input-tråden fungerer fint. Det jeg prøver å få til med output-tråden, er at når metoden send(String message) blir kalt, så signaliserer den til en Condition jeg har inni en evig loop i output-tråden, og dermed outputes meldingen. Så kjører den loopen på nytt, støter på en await(), og må igjen vente på at metoden send() blir kalt for å signalisere. Problemet er som så at jeg får en IllegalMonitorStateException?

 

https://gist.github.com/anonymous/ec5c2c6a44e69b74ac8d

Endret av banansplitt™
Lenke til kommentar
Videoannonse
Annonse

Du driver med socket programmering? 

 

En socket har en output stream og en input stream. Bruk BufferReader og BufferWrriter som stream objektene.

Bruk BufferedReader sin readLine() funksjon for å sjekke om det er mer input å lese.

Bruk BrufferWriter write og så flush for å sikre at de blir sendt. 

 

Hvis du skal oppdatere grafiske komponenter bruk

 SwingUtilities.InvokeLater(---)

Jeg villa ha sjekket om dety er faktisk meldinger å legge til og sørge for a GUI tråden kan oppdatere om dette er nødvendig

while (true) {
		try {
		     app.addMessage(input.readUTF(), input.readUTF());
		} catch (IOException e) {
		  e.printStackTrace();
		}

Husk å flush streamen din!

while (true) {
		noNewMessage.await();
		output.writeUTF(message);
	    }

Lykke til :)

Endret av Joachim Hansen
Lenke til kommentar

Slik?

Socket socket = new Socket(HOST, PORT);
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream));

Får ikke noe ut av den ved å bruke inputReader.readLine();

 

EDIT: Løste seg. Tusen takk :)

Endret av banansplitt™
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...