Hallo
ich versuche mich gerade an einem Server Client Programm das über Sockets und ObjectInputStream und ObjectOutputStream kommuniziert.
Dabei hab ich das aktuelle Problem, das die Communikation im EDT mit abgearbeitet wird. Das führt dazu das einige Kommandos die GUI einfrieren lassen. Jetzt würde ich gern das von einander Trennen , und hier kommen die Probleme:
Ich habe versuch die Communikation in einen separaten Thread auszulagern :
Der Code wird hier bei nur bis zur Zeile System.out.prinln("1") ausgeführt. Wobei dieses System.out nicht mehr ausgeführt wird.
Die GUI friert auch nicht ein, so das ich andere Threads mit anderen Buttons startet kann.
Hab das ganze auch mit SwingWorker versucht, mit dem selben ergebniss.
Was mach ich falsch ? bzw. Wie macht man sowas richtig, sodass ich aus der GUI immer noch Commandos an den Server schicken kann und dir server auch commandos an den Clienten schicken kann ?
ich versuche mich gerade an einem Server Client Programm das über Sockets und ObjectInputStream und ObjectOutputStream kommuniziert.
Dabei hab ich das aktuelle Problem, das die Communikation im EDT mit abgearbeitet wird. Das führt dazu das einige Kommandos die GUI einfrieren lassen. Jetzt würde ich gern das von einander Trennen , und hier kommen die Probleme:
Ich habe versuch die Communikation in einen separaten Thread auszulagern :
Java:
private void ConnectButtonActionPerformed(java.awt.event.ActionEvent evt) {
comm = new Comm();
comm.start();
}
Java:
class Comm extends Thread
{
boolean status=true;
int count =0;
Socket socket = null;
private ObjectInputStream ois = null;
private ObjectOutputStream oos = null;
private CommandObject eingang = null;
private CommandObject ausgang = null;
@Override
public void run()
{
System.out.println("0");
try {
socket = new Socket("127.0.0.1", 44444);
ois = new ObjectInputStream(socket.getInputStream());
oos = new ObjectOutputStream(socket.getOutputStream());
} catch(Exception e) {
System.out.println(e.getMessage() );
return;
}
System.out.println("1");
ausgang = new CommandObject();
ausgang.setCommand("Hallo Server");
try {
oos.writeObject(ausgang);
oos.flush();
oos.reset();
} catch (IOException ex) {
Logger.getLogger(Comm.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("2");
while (status==true) {
System.out.println(".");
try {
eingang = (CommandObject) ois.readObject();
//Reaktion auf die Client Befehele
if (eingang.getCommand().equals("EXIT") == true) {
break;
}
if(eingang.getCommand().equals("WAIT") == true){
System.out.println("Please Wait - Server is Starting");
}
} catch (Exception e) {
break;
}
}
try {
ois.close();
oos.close();
socket.close();
} catch (IOException ex) {
System.err.println("Fehler beim Beenden der Verbindung");
}
}
public void disconnect(){
status=false;
try {
socket.close();
} catch (IOException ex) {
Logger.getLogger(Comm.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Der Code wird hier bei nur bis zur Zeile System.out.prinln("1") ausgeführt. Wobei dieses System.out nicht mehr ausgeführt wird.
Die GUI friert auch nicht ein, so das ich andere Threads mit anderen Buttons startet kann.
Hab das ganze auch mit SwingWorker versucht, mit dem selben ergebniss.
Was mach ich falsch ? bzw. Wie macht man sowas richtig, sodass ich aus der GUI immer noch Commandos an den Server schicken kann und dir server auch commandos an den Clienten schicken kann ?