Frage zu Threads

mrbela

Bekanntes Mitglied
Hey Leute!

Ich bin gerade dabei Tetris zu programmieren. Jetzt stoße ich aber auf eine Designfrage bzgl Threads:

Ich benutze das MVC:

- Als Model benutze ich ein Array, das das Spielfeld darstellt.
- Im View habe ich ein JPanel eingebettet, das mit Hilfe der paint-Methode basierend auf dem Array des Models das Spielfeld malt. Klappt alles soweit.
- Der Controller initialisiert den View und das Model, erbt von Thread. Hier habe ich die run-Methode eingebettet, die entsprechend immer das Model bearbeitet, damit das Spiel ist wie tetris (Figur drehen, senken etc.)

Dann habe ich noch eine initiale Klasse, die ich Tetris genannt habe. Die sieht so aus:

Java:
package init;

import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import controller.TetrisControler;
import view.View2;

public class Tetris {
	
	Thread aktSpiel;
	
	public Tetris() throws InterruptedException {
						
		aktSpiel = new TetrisControler(this);
		aktSpiel.start();
	}
	
	public void resetGame() {
		System.out.println("------->"+ aktSpiel.isAlive());
		
		aktSpiel = new TetrisControler(this);
		aktSpiel.start();
	}
	
	public static void main(String[] args) throws InterruptedException, ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
		UIManager.setLookAndFeel(
	            UIManager.getSystemLookAndFeelClassName());
		new Tetris();
	}
}

Nun zu meiner Frage: Rufe ich vom View aus die resetGame() von Tetris auf, so wird ein ganz neues Fenster geöffnet, da ja mein Controller-Thread ein neues Fenster intialisiert.

Wie muss ich das ganze denn umdesignen, dass es Sinn macht?

Ich dachte etwa daran, dass ich in der Klasse Tetris den View initialiseire (der läuft dann ja im main-Thread, nicht im Controller-Thread) und einen eigenen Controller-Thread. Wenn ich das tue, dann "hört" das JFrame (z.B. bei repaint()) aber nicht mehr auf mein Controller, also wenn der sich zB ändert oder? Da ja der View im Main-Thread und nicht mehr im Controller-Thread läuft.

Ich bin jetzt am überlegen, wei ich das umdesigne... Bisher habe ich das reset() im Controller gemacht. DAs ist glaube ich aber kein schöner Stil, da der Thread immer weiterläuft.

Ich hoffe, ihr habt verstanden, um was es mir geht.

Vielen Dank für die Hilfe!!
 

Marco13

Top Contributor
Ein bißchen wenig Code und etwas zu schwammig und/oder unpräzise, um was konkretes sagen zu können...

- Als Model benutze ich ein Array, das das Spielfeld darstellt.

Ein roher Array ist kein Modell. Das Modell im MVC-Pattern ist üblicherweise etwas, wo man Listener/Observer dran hängen kann, die bei Änderungen benachrichtigt werden. (Ein solcher Listener ist dann eben die View). Ob MVC das Paradepattern für ein Spiel wie Tetris ist, darüber könnte man philosophieren, aber darum mag es hier mal nicht gehen...

Nun zu meiner Frage: Rufe ich vom View aus die resetGame() von Tetris auf, so wird ein ganz neues Fenster geöffnet, da ja mein Controller-Thread ein neues Fenster intialisiert.

Wie muss ich das ganze denn umdesignen, dass es Sinn macht?

Von der View aus nicht Tetris#resetGame aufrufen :joke: Nein, im ernst: Wenn man da ein neues Objekt erstellt, ist das ja kein "reset" in diesem Sinne. Man würde ja meinen, dass dieser Reset z.B. bewirken sollte, dass im Modell alle Steine gelöscht werden oder so... demnach könnte man eine Aufrufkette haben, über den Controller ans Modell, wo dann irgendwas wie "removeAllStones" oder so aufgerufen wird... Wenn dort aber auch noch ein Thread angehalten werden soll, muss man sich genau überlegen, wie und wo man das macht (allgemein, die Funktionen die man öfter braucht: Start, Stop, Reset)

Ich dachte etwa daran, dass ich in der Klasse Tetris den View initialiseire (der läuft dann ja im main-Thread, nicht im Controller-Thread)
Die View (bzw. alles, was mit Swing zu tun hat) läuft im Event-Dispatch-Thread, und NICHT im main-Thread. Auch das sollte man beachten.

und einen eigenen Controller-Thread. Wenn ich das tue, dann "hört" das JFrame (z.B. bei repaint()) aber nicht mehr auf mein Controller, also wenn der sich zB ändert oder?

Das "hören" könnte durch die oben angedeuteten Listener abgedeckt sein ... (vielleicht heißen die genau deswegen auch so :reflect: ;) )
 

mrbela

Bekanntes Mitglied
Erstmal vielen Dank für Deine Hilfe!

Das mit den Threads, das ist sone Sache..!!

Welcher Thread zeichnet denn zB im JPanel (mit Hilfe der paint-Methode). Das müsste auch der Event-Dispatch-Thread sein, oder?

Noch eine frage: Wenn das Spiel vorbei ist, dann öffnet sich ein JDialog mit ner Highscore (per JDBC). Sollte der Thread, der das Spielfeld malt, dann per stop() gestoppt werden, oder einfach nichts mehr zeichnen? Was wäre denn der schönere Programmierstil?

Vielen Dank!
 

Marco13

Top Contributor
Ja, Zeichnen macht der EDT. Deswegen irritiert mich auch die Frage nach dem "Thread, der das Spielfeld malt" - den solltest du demnach tunlichst NICHT stoppen ;) Oder meintest du einen anderen Thread, der mit repaint() ein Neuzeichnen auslöst?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben