Guten Abend 
Zurzeit programmiere ich an einem Multichat.
Dieser beruht auf der wunderschönen Terminal (Für Windowsuser: Eingabeaufforderung)
Der Server macht keine Probleme, viel mehr der Client.
Wenn der Client getstartet wird, laufen 3 Threads nebeneinander.
1. die Klasse Read (Zum Einlesen+Decodierung von den empfangenen Bytes und anschließend die Ausgabe als String)
2. die Klasse Send (Zum Einlesen+Encodierung der Eingabe vom Benutzer (via InputStream) und anschließend der "Versand" an den Server)
3. Thread run() in der ChatClient-Klasse (HauptKlasse eigentlich) in der immer gecheckt wird ob "done == true" ist, wenn jah, wird der Client geschlossen (Der Thread hat nichts zur sache des Problems)
Mein Problem:
Erstmal bisschen Code:
Klasse Read im Client:
und einmal die Klasse Send vom Client:
Ich hab in den Quellcodes 3 Punkte einkommentiert.
Also bei Point2 bzw Point3 wird halt das ausgegeben:
"Username: " und da kann man dann was schreiben, was an den Server soll.
Doch wird grade was vom Server empfangen, wird einfach hinter gesezt.
Bzw wird ne neue Line angefangen UND ich muss sogar noch erst [Enter] drücken um nochmal was scheiben zu können.
Also eigentlich möchte ich, dass
Also ich hoffe irgendjemand hat das verstanden und kann mir eventuell helfen.
Wer das ganze überhaupt nicht gecheckt hat und nocht weiß was ich eigentlich will, für den hab ch vollstes Verständis :cry:
Nunja, wir werdens sehen, Lg Chris (;
(PS: Und nein, ich möchte das ganze nicht mit ner GUI (Listbox+Textbox) lösen ^^)
Zurzeit programmiere ich an einem Multichat.
Dieser beruht auf der wunderschönen Terminal (Für Windowsuser: Eingabeaufforderung)
Der Server macht keine Probleme, viel mehr der Client.
Wenn der Client getstartet wird, laufen 3 Threads nebeneinander.
1. die Klasse Read (Zum Einlesen+Decodierung von den empfangenen Bytes und anschließend die Ausgabe als String)
2. die Klasse Send (Zum Einlesen+Encodierung der Eingabe vom Benutzer (via InputStream) und anschließend der "Versand" an den Server)
3. Thread run() in der ChatClient-Klasse (HauptKlasse eigentlich) in der immer gecheckt wird ob "done == true" ist, wenn jah, wird der Client geschlossen (Der Thread hat nichts zur sache des Problems)
Mein Problem:
Da ich denke dass das jetzt kaum einer verstanden hat, versuch ich es nochmal zu erklären.Login auf Server...
Eingeloggt!
>> person1 hat sich eingeloggt.
Server: Willkommen person1.
User: >>person2 hat sich ausgeloggt.
[Return]
User:
Erstmal bisschen Code:
Klasse Read im Client:
Code:
import java.io.*;
public class Read extends Thread
{
ChatClient cc;
Decode decoding;
public Read(ChatClient chatclient)
{
this.cc = chatclient;
}
private void read() throws IOException
{
byte[] data, decodedata;
decoding = new Decode();
String line, plaindecodedata;
while(true)
{
line = cc.in.readLine();
if (line != null)
{
data = line.getBytes();
decodedata = decoding.getBytes(data);
plaindecodedata = new String(decodedata);
System.out.println(plaindecodedata); // Point1
}
}
}
@Override public void run()
{
try
{
read();
}
catch(IOException e)
{
System.out.println("Error: " + e.getMessage());
}
cc.done = true;
}
}
Code:
import java.io.*;
public class Send extends Thread
{
PrintWriter out;
Encode Encoding;
ChatClient cc;
String name;
public Send(ChatClient cc, String name)
{
out = cc.out;
this.cc = cc;
this.name = name;
Encoding = new Encode();
}
public void send(String plaindata)
{
byte[] data = plaindata.getBytes();
byte[] encodedata = Encoding.getBytes(data);
String plainencodedata = new String(encodedata);
out.println(plainencodedata);
out.flush();
}
public void run()
{
try{
BufferedReader userinput = new BufferedReader(new InputStreamReader(System.in));
String line;
System.out.print(name + ": "); // Point2
while (!(line = userinput.readLine()).equals("quit"))
{
send(line);
System.out.print(name + ": "); //Point3
}
userinput.close();
}
catch (IOException e)
{
System.out.println("Error: " + e.getMessage());
}
cc.done = true;
}
}
Also bei Point2 bzw Point3 wird halt das ausgegeben:
"Username: " und da kann man dann was schreiben, was an den Server soll.
Doch wird grade was vom Server empfangen, wird einfach hinter gesezt.
Bzw wird ne neue Line angefangen UND ich muss sogar noch erst [Enter] drücken um nochmal was scheiben zu können.
Also eigentlich möchte ich, dass
immer unten steht, und wenn was gesendet wird, ruscht die "User-Inputline" halt einen runter."Username: "
Also ich hoffe irgendjemand hat das verstanden und kann mir eventuell helfen.
Wer das ganze überhaupt nicht gecheckt hat und nocht weiß was ich eigentlich will, für den hab ch vollstes Verständis :cry:
Nunja, wir werdens sehen, Lg Chris (;
(PS: Und nein, ich möchte das ganze nicht mit ner GUI (Listbox+Textbox) lösen ^^)