Hallo,
ich stehe vor einem Problem, das ich seit einiger Zeit nicht lösen kann. Aufgrund des Problems an sich würde es wahrscheinlich auch ins Anfängerforum passen, aber im Programm geht es um Client/Serverconnections.
Ich möchte aus einem Hauptprogramm mehrere Clients mit Messages versorgen.
Es geht um vier hauptsächliche Klassen und meine Unvermögen, diese richtig zu verbinden:
- class Main starte im Prinzip nur alles, so auch MainWindow
- class MainWindow beinhaltet alles rund ums GUI und den Programmablauf
- class MultiServerMonitor ist der Server, der die Clientanbindungen annehmen und handlen soll
- class MultiServerThread soll sich um die Messages zwischen Server und Clients kümmern.
An sich klappt die Verbindung zu den Clients wunderbar. Meine Problem ist aber, dass ich die Messages
aus besitmmten Methoden der Klasse MainWindow senden will. Und ich kriege es einfach nicht hin, in
MainWindow die entsprechende Methode der Klasse MultiServerThread aufzurufen.
Hier mal die wichtigsten Code- Ausschnitte:
Klasse MainWindow:
Klasse MultiServerMonitor:
Klasse MultiServerThread:
Starte ich das alles zusammen mit einem Client, dann bekomme ich bei Drücken des Buttons eine NPE.
Grund ist, dass MainWindow die Klasse MultiServerThread nicht kennt. Wie übergebe ich das konkret in meinem Konstrukt? Ich komme einfach nicht drauf. Wäre für Hilfe sehr, sehr dankbar.
Grüße,
dansmo
ich stehe vor einem Problem, das ich seit einiger Zeit nicht lösen kann. Aufgrund des Problems an sich würde es wahrscheinlich auch ins Anfängerforum passen, aber im Programm geht es um Client/Serverconnections.
Ich möchte aus einem Hauptprogramm mehrere Clients mit Messages versorgen.
Es geht um vier hauptsächliche Klassen und meine Unvermögen, diese richtig zu verbinden:
- class Main starte im Prinzip nur alles, so auch MainWindow
- class MainWindow beinhaltet alles rund ums GUI und den Programmablauf
- class MultiServerMonitor ist der Server, der die Clientanbindungen annehmen und handlen soll
- class MultiServerThread soll sich um die Messages zwischen Server und Clients kümmern.
An sich klappt die Verbindung zu den Clients wunderbar. Meine Problem ist aber, dass ich die Messages
aus besitmmten Methoden der Klasse MainWindow senden will. Und ich kriege es einfach nicht hin, in
MainWindow die entsprechende Methode der Klasse MultiServerThread aufzurufen.
Hier mal die wichtigsten Code- Ausschnitte:
Klasse MainWindow:
Java:
public class MainWindow extends JFrame{
//Variablen, Konstanten, Arrays
private ServerMonitor sm = Main.getSM();
private MultiServerMonitor msm;
private MultiServerThread mst;
...
//Constructor
MainWindow(){
...
startServer(); //startet den Server
}
void startServer(){
msm = new MultiServerMonitor();
}
//dieser Aufruf steht in einem ButtonListener im Moment
mst.sendMessage("hello World!"); //soll Methode in MultiServerThread ansteuern und hello World an die Clients senden
}
Klasse MultiServerMonitor:
Java:
public class MultiServerMonitor {
ServerSocket serverSocket = null;
boolean listening = true;
MultiServerMonitor(){
try {
serverSocket = new ServerSocket(40444);
} catch (IOException e) {
System.err.println("Could not listen on port: 40444.");
System.exit(-1);
}
while (listening)
try{
new MultiServerThread(serverSocket.accept()).start();
}catch (IOException e){
System.err.println("unaible to start ServerThread");
}
}
public void exitConnection(){
try{
serverSocket.close();
}catch (IOException e) {
System.err.println("Was unailbe to close connection.");
}
}
}
Klasse MultiServerThread:
Java:
public class MultiServerThread extends Thread {
private Socket socket = null;
public MultiServerThread(Socket socket) {
super("MultiServerThread");
this.socket = socket;
}
/*
public void run() {
//schleife, die messages an die clients sendet:
for(;;){
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Server says: hello client, welcome to the show!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
*/
public void sendMessage(String message){
try{
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(message);
} catch (IOException e){
System.err.println("Could not handle PrintWriter out.");
}
}
}
Starte ich das alles zusammen mit einem Client, dann bekomme ich bei Drücken des Buttons eine NPE.
Grund ist, dass MainWindow die Klasse MultiServerThread nicht kennt. Wie übergebe ich das konkret in meinem Konstrukt? Ich komme einfach nicht drauf. Wäre für Hilfe sehr, sehr dankbar.
Grüße,
dansmo