banansplitt™ Skrevet 27. april 2015 Del Skrevet 27. april 2015 (endret) 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 27. april 2015 av banansplitt™ Lenke til kommentar
banansplitt™ Skrevet 27. april 2015 Forfatter Del Skrevet 27. april 2015 Etter å ha tenkt meg litt om er det vel en total bom å bruke locks og conditions til noe sånt. Finnes det en form for Buffer eller noe jeg bare kan putte nye meldinger inn i sånn at loopen kjører videre når det har kommet nye meldinger i Buffer? Lenke til kommentar
Enthroner Skrevet 27. april 2015 Del Skrevet 27. april 2015 Kanskje noe slikt som dette http://omtlab.com/java-message-passing-between-threads/ ? Lenke til kommentar
Joachim Hansen Skrevet 27. april 2015 Del Skrevet 27. april 2015 (endret) 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 27. april 2015 av Joachim Hansen Lenke til kommentar
banansplitt™ Skrevet 27. april 2015 Forfatter Del Skrevet 27. april 2015 (endret) 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 28. april 2015 av banansplitt™ Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå