Hallo zusammen,
Ich programmiere momentan ein kleines Netzwerkspiel für 2 Spieler (Applet). Sie verbinden sich über RMI mit dem Server, der die Spiellogik enthält.
Wenn beide Clients bereit sind dann lässt der Server das Spiel beginnen. Die Spieler
werden sequenziell benachrichtigt, dass das Spiel beginnt.
Beim Spielbeginn soll das JPanel gewechselt und das Spielbrett angezeigt werden.
Wenn jetzt der Client benachrichtigt soll zuerst noch eine DialogBox angezeigt werden und danach
erst das Panel gewechselt werden. Das Panel wird mir angezeigt, jedoch wenn ich auf OK klicke dann
friert das Ding ein und ich kann nichts mehr machen.
Code des einen JPanels (Home):
Code des Applets (Benachrichtigung durch Server, dass der Client das Spiel beginnen soll):
Wenn der Server den Client benachrichtigt, ist der glaube ich immernoch die Codezeile
am Ausführen. Muss ich in meinem Falle hier
Threads benutzten, um das GUI zu updaten oder was schlägt Ihr mir vor?
Brauche momentan nur folgenden Thread, um das GUI am Anfang zu initialisieren und anzuzeigen:
Grüsse
Ich programmiere momentan ein kleines Netzwerkspiel für 2 Spieler (Applet). Sie verbinden sich über RMI mit dem Server, der die Spiellogik enthält.
Wenn beide Clients bereit sind dann lässt der Server das Spiel beginnen. Die Spieler
werden sequenziell benachrichtigt, dass das Spiel beginnt.
Beim Spielbeginn soll das JPanel gewechselt und das Spielbrett angezeigt werden.
Wenn jetzt der Client benachrichtigt soll zuerst noch eine DialogBox angezeigt werden und danach
erst das Panel gewechselt werden. Das Panel wird mir angezeigt, jedoch wenn ich auf OK klicke dann
friert das Ding ein und ich kann nichts mehr machen.
Code des einen JPanels (Home):
Java:
private void jButtonJoinActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonJoinActionPerformed
if(!jTextFieldNickname.getText().equals("")){
if(applet.getClient()==null){
try {
applet.setClient(new GameClient(jTextFieldNickname.getText(),applet));
JOptionPane.showMessageDialog(applet.getContentPane(),"You have been added to the Queue.\n"
+ "Please wait for the second Player to join the Game.","Queue",JOptionPane.INFORMATION_MESSAGE);
applet.getClient().sendReady();
} catch(MaxPlayerReachedException e){
JOptionPane.showMessageDialog(applet.getContentPane(),e.getMessage(),"Queue",JOptionPane.ERROR_MESSAGE);
} catch(NameReservedException e){
JOptionPane.showMessageDialog(applet.getContentPane(),e.getMessage(),"Nickname",JOptionPane.ERROR_MESSAGE);
} catch(RemoteException e){
JOptionPane.showMessageDialog(applet.getContentPane(),"Cannot connect to Game-Server.\nPlease retry later.",
"Connection-Error",JOptionPane.ERROR_MESSAGE);
} catch (MalformedURLException e) {
JOptionPane.showMessageDialog(applet.getContentPane(),"Cannot connect to Game-Server.\nThe specified URL was invalid.",
"Connection-Error",JOptionPane.ERROR_MESSAGE);
} catch (NotBoundException e) {
JOptionPane.showMessageDialog(applet.getContentPane(),"Cannot connect to Game-Server.\nThe Game-Server is not running.",
"Connection-Error",JOptionPane.ERROR_MESSAGE);
}
}
else{
JOptionPane.showMessageDialog(applet.getContentPane(),"Client already generated","Init",JOptionPane.INFORMATION_MESSAGE);
}
}
else{
JOptionPane.showMessageDialog(applet.getContentPane(),"You have forgotten to fill in your Nickname.","Fehler",JOptionPane.ERROR_MESSAGE);
jTextFieldNickname.requestFocusInWindow();
}
}
Java:
public void gameHasBegunSecond(){
System.out.println("hallo ich bin second");
getContentPane().removeAll();
getContentPane().add(game);
JOptionPane.showMessageDialog(getContentPane(),"The opponent Player has joined the Game.\n"+"" +
"The coin was tossed: You may start with the Game second.","Game",JOptionPane.INFORMATION_MESSAGE);
//game.GameHasBegunSecond();
}
public void gameHasBegunFirst(){
System.out.println("hallo ich bin first");
getContentPane().removeAll();
getContentPane().add(game);
JOptionPane.showMessageDialog(getContentPane(),"The opponent Player has joined the Game.\n"+"" +
"The coin was tossed: You may start with the Game.","Game",JOptionPane.INFORMATION_MESSAGE);
//game.GameHasBegunFirst();
}
Wenn der Server den Client benachrichtigt, ist der glaube ich immernoch die Codezeile
Java:
applet.getClient().sendReady();
Threads benutzten, um das GUI zu updaten oder was schlägt Ihr mir vor?
Brauche momentan nur folgenden Thread, um das GUI am Anfang zu initialisieren und anzuzeigen:
Java:
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
setSize(953,659);
createGUI();
}
});
Grüsse