Hallo,
ich versuche ein Poker-Programm der Hold'em Texas-Variante zu programmieren und möchte mich dabei strikt an das MVC-Konzept halten.
Dabei bin ich auf das Problem gestoßen, dass meine GUI einfriert, während Code des Controllers ausgeführt wird. Nach einigem googlen und lesen hier im Forum habe ich dann heraus gefunden, dass es wohl daran liegt, dass der Code des Controllers auch im EventDispatchThread ausgeführt wird.
Dann habe ich nach einer Lösung gesucht, wie man am besten den Controller und die View in eigene Threads aufteilt.
Folgender Beitrag kam meinem Problem am nächsten: http://www.java-forum.org/java-basics-anfaenger-themen/35878-graphical-user-interface-friert-waerend-programmdurchlauf-ein.html
Leider funktioniert dort der Link zu der MVC-Anleitung nicht mehr und der Lieblingslink im Beitrag von AlArenal weiter unten funktioniert bei mir auch nicht richtig. Dort komme ich zwar auf eine Seite und kann unten auf "Play" drücken, aber es passiert nichts. Habe das in mehreren Browsern ausprobiert. Wenn mir da jemand helfen kann wieso das nicht funktioniert ist mir vll. auch schon geholfen
Ansonsten währe ich dankbar für jeden Tipp oder Link, wie ich den Controller am besten in einen eigenen Thread packe.
Hier noch ein Beispiel zu dem Design, dass ich gewählt habe:
[Java]
class Main
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
GameGUI gui = new GameGUI();
new GameListener(gui);
gui.setVisible(true);
}
});
}
}
// Controller
class GameListener
{
private GameGUI gui;
private Game game;
public GameListener(GameGUI gui, Game game)
{
this.gui = gui;
this.game = game;
this.game.addGameListener(this);
}
// hier sind Methoden wie startGame(); und playRound();
}
// View
class GameGUI extends JFrame
{
// GUI-Componenten als Instanzvariablen
public GameGUI()
{
// Konstruktor sorgt dafür, dass die Componenten passend angeordnet werden etc.
}
}
// Model
class Game
{
private int playerTurn;
private int round;
// weitere Instanzvariblen das Spiel betreffend
public Game()
{
// setzen der Instanzvariablen
}
public addGameListener(GameListener gl)
{
// Methode zum hinzügen eines GameListeners
}
public removeGameListener(GameListener gl)
{
// Methode zum entfernen eines GameListeners
}
}
[/code]
Habe es versucht nur das zum Verständnis nötige hinzuzufügen. Wenn hier aber noch Erklärungen gebraucht werden, bitte einfach fragen
Vielen Dank fürs lesen.
ich versuche ein Poker-Programm der Hold'em Texas-Variante zu programmieren und möchte mich dabei strikt an das MVC-Konzept halten.
Dabei bin ich auf das Problem gestoßen, dass meine GUI einfriert, während Code des Controllers ausgeführt wird. Nach einigem googlen und lesen hier im Forum habe ich dann heraus gefunden, dass es wohl daran liegt, dass der Code des Controllers auch im EventDispatchThread ausgeführt wird.
Dann habe ich nach einer Lösung gesucht, wie man am besten den Controller und die View in eigene Threads aufteilt.
Folgender Beitrag kam meinem Problem am nächsten: http://www.java-forum.org/java-basics-anfaenger-themen/35878-graphical-user-interface-friert-waerend-programmdurchlauf-ein.html
Leider funktioniert dort der Link zu der MVC-Anleitung nicht mehr und der Lieblingslink im Beitrag von AlArenal weiter unten funktioniert bei mir auch nicht richtig. Dort komme ich zwar auf eine Seite und kann unten auf "Play" drücken, aber es passiert nichts. Habe das in mehreren Browsern ausprobiert. Wenn mir da jemand helfen kann wieso das nicht funktioniert ist mir vll. auch schon geholfen
Ansonsten währe ich dankbar für jeden Tipp oder Link, wie ich den Controller am besten in einen eigenen Thread packe.
Hier noch ein Beispiel zu dem Design, dass ich gewählt habe:
[Java]
class Main
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
GameGUI gui = new GameGUI();
new GameListener(gui);
gui.setVisible(true);
}
});
}
}
// Controller
class GameListener
{
private GameGUI gui;
private Game game;
public GameListener(GameGUI gui, Game game)
{
this.gui = gui;
this.game = game;
this.game.addGameListener(this);
}
// hier sind Methoden wie startGame(); und playRound();
}
// View
class GameGUI extends JFrame
{
// GUI-Componenten als Instanzvariablen
public GameGUI()
{
// Konstruktor sorgt dafür, dass die Componenten passend angeordnet werden etc.
}
}
// Model
class Game
{
private int playerTurn;
private int round;
// weitere Instanzvariblen das Spiel betreffend
public Game()
{
// setzen der Instanzvariablen
}
public addGameListener(GameListener gl)
{
// Methode zum hinzügen eines GameListeners
}
public removeGameListener(GameListener gl)
{
// Methode zum entfernen eines GameListeners
}
}
[/code]
Habe es versucht nur das zum Verständnis nötige hinzuzufügen. Wenn hier aber noch Erklärungen gebraucht werden, bitte einfach fragen
Vielen Dank fürs lesen.