Hi,
ich programmiere ein Poker-Netzwerkspiel. Es soll so ablaufen, dass der Server das Spiel startet und bis zu 7 Clients dazukommen (also maximal 8 Spieler). Das Spiel soll auch schon starten können, wenn noch nicht alle Plätze belegt sind. Und hier liegt das Problem: Während der Server auf weitere Verbindungen wartet, kann ich beim Server kein JFrame anzeigen.
Beim starten öffnet sich ein JDialog (Im Code: clientServer), in dem man wählen kann, ob man ein Spiel erstellt (ActionCommand: "host") oder beitreten möchte. Danach soll das Dialogfenster geschlossen werden und ein JFrame soll sich öffnen. Als Client funktioniert das ganze auch hervorragend, aber beim Server wird das JFrame nicht angezeigt.
In der Methode startGUI() steht nur ein "setVisible(true);".
Wenn ich die Zeile "server = new Server();" weglasse, funktioniert alles. Aber so wird noch nichteinmal "Test" in der Konsole ausgegeben. Ohne den SwingUtilities-Block (also nur: poker.startGUI()) zeigt er zwar das JFrame an, aber nur als grauen Kasten ohne Inhalt.
Hier noch die Klasse Server:
Ich glaube das sind alle relevanten Code-Ausschnitte.
Danke für die Hilfe!
ich programmiere ein Poker-Netzwerkspiel. Es soll so ablaufen, dass der Server das Spiel startet und bis zu 7 Clients dazukommen (also maximal 8 Spieler). Das Spiel soll auch schon starten können, wenn noch nicht alle Plätze belegt sind. Und hier liegt das Problem: Während der Server auf weitere Verbindungen wartet, kann ich beim Server kein JFrame anzeigen.
Beim starten öffnet sich ein JDialog (Im Code: clientServer), in dem man wählen kann, ob man ein Spiel erstellt (ActionCommand: "host") oder beitreten möchte. Danach soll das Dialogfenster geschlossen werden und ein JFrame soll sich öffnen. Als Client funktioniert das ganze auch hervorragend, aber beim Server wird das JFrame nicht angezeigt.
Code:
else if(e.getActionCommand().equals("host")) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Test");
poker.startGUI();
clientServer.dispose();
}
});
server = new Server();
}
In der Methode startGUI() steht nur ein "setVisible(true);".
Wenn ich die Zeile "server = new Server();" weglasse, funktioniert alles. Aber so wird noch nichteinmal "Test" in der Konsole ausgegeben. Ohne den SwingUtilities-Block (also nur: poker.startGUI()) zeigt er zwar das JFrame an, aber nur als grauen Kasten ohne Inhalt.
Hier noch die Klasse Server:
Code:
public class Server {
private Vector<ServerThread> connections = new Vector<ServerThread>();
private int cnt;
private ServerSocket server;
public Server(){
try {
server = new ServerSocket(62886);
cnt = 0;
while (cnt<8) {
Socket socket = server.accept();
ServerThread st = new ServerThread(socket, this);
connections.addElement(st);
st.start();
cnt++;
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, e.toString(),"Error in class Server",JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
public void sendToAll(String msg) {
for(int i=0; i<connections.size(); i++) {
((ServerThread) connections.elementAt(i)).sendMessage(msg);
}
}
}
Ich glaube das sind alle relevanten Code-Ausschnitte.
Danke für die Hilfe!