22. november 2003 - 14:04Der er
24 kommentarer og 1 løsning
Chat med Gui problem (Kører over Socket)
I mit chat program jeg har, kører der en Server, som har en Thread per client. Disse Threads modtager beskeder fra andre brugere, og sender beskeden videre til alle klienter som er forbundet til serveren (De nødvendige informationer er protected på serveren, så den kan sagtens få fat i forbindelsen til dem)
På klient siden kører der en Thread som modtager disse beskeder, og som så skriver dem ind på klientens skærm.
Når jeg kører programmet uden Gui, så kan jeg godt få det til at virke (lokalt... har ikke prøvet over nettet endnu). Dertil bruger jeg denne kode i run metoden i Thread:
System.out.println(c.inStream.readLine());
(c er en instans a Client.class)
Hvis jeg så til gengæld prøver at bruge en Gui istedet, så virker det ikke mere. Jeg har prøvet at bruge denne kode i run() metoden i stedet:
(gc er en instans a GuiClient.class) txtChatLog er sat til protected (Har også prøvet med public)
Men når jeg så kører den, så sender den kun beskeden til serveren (Som modtager beskeden og skriver beskeden på Server's skærm billede (Som kun er et dos-vindue på nuværende tidspunkt), hvorimod der sker ikke nogen ændringer i textarea i Gui'en
Og hvorfor er det lige at det kører vildt langsomt? Er det fordi jeg prøvet at køre både Client og Server på samme maskine? Jeg har en 2.4 GHz, og når jeg kører begge ting, så bruger den 100% af min processor kraft...
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg tror du er løbet ind i et tråd-problem. En tråd begynder at loope et eller andet sted og derfor får du aldrig noget frem på klientens skærm. Denne antagelse understøttes også af det faktum, at din CPU belastes med 100 %, hvilket er et normalt tegn på at en trød looper, altså kosntant kører i ring uden at udføre et egentligt arbejde.
Har du prøvet lige at teste med Strint test = c.inStream.readLine(); System.out.println(test); gc.txtChatLog.setText(gc.txtChatLog.getText() + "\n" + test);
Prøv at rette din run i "ChatRead.java" til noget ala:
public void run() { while(true) // Uendelig løkke, så den kan blive ved med at sende beskeder tilbage { try { gc.txtChatLog.setText(gc.txtChatLog.getText() + "\nOh No"); gc.txtChatLog.setText(gc.txtChatLog.getText() + "\n" + gc.inStream.readLine()); Thread.sleep(1000); } catch(Exception e) { e.printStackTrace(); } } }
Tja, jeg skulle have brugt hele denne uge på at få gjort koden til at være lettere at læse, men jeg har lagt syg hele ugen, så jeg har ikke kunnet kigge på det før nu... Skal bruge det til skole på mandag
Takker, nu opdatere den txtChatLog, dog ser det ikke ud til at virke helt endnu, kan dog ikke lige ummidelbart se hvor problemet skal ligge. Efter kort tid lader den være med at opdatere skærmen. Beskederne bliver rigtigt nok sendt (De bliver udskrevet på Server skærmen) Jeg prøve at lave en e.printStackTrace ved alle Try/Catch, men der bliver ikke skrevet nogen fejlmeddelelse ud... Men det må jeg vel kigge nærmere på i morgen, arbejder ikke mere med det i aften
Det er nok fordi du laver en ny tråd (ChatRead) hver gang du trykker på send og aldrig lukker nogle af dem. Du behøver sådan set kun en tråd som lytter efter beskeder
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.