Zu viele Fenster - HILFE!

Toastbot

Mitglied
Ich hab ein Problem und ich kapiere einfach meinen Fehler nicht.
Ich habe ein Skript genommen was ein Fenster erstellt, auf dem ich dann (später) ein spiel aufbaue nach und nach. Nur anstatt EIN Fenster zu erstellen wie in meiner Vorherigen Version ohne Probleme, erstellt das Programm jetzt unendlich viele Fenster... HILFE!

Hier das Script welches ich ausführe:
Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;


public class Game {

	private JFrame frame;
	int time;
	Graphics2D g2d;
	int meter = 32;
	int rasterX = 16;
	int rasterY = 16;
	int dimX = rasterX*meter;
	int dimY = rasterY*meter;
	int x=1;
	int y=1;

	public Game() {
		frame = new JFrame("Catch the ball!");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationByPlatform(true);
		MovePanel panel = new MovePanel();
		frame.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_UP) {
				}
			}
		});

		frame.add(panel);

		Timer look = new Timer(500, panel);
		look.setRepeats(true);
		look.start();

		frame.pack();
		frame.setVisible(true);

	}
	public static void main(String[] args) {		
		new Game();
	}
	class MovePanel extends JPanel implements ActionListener {
		private static final long serialVersionUID = 1L;
		private int counter;
		public MovePanel() {

			super();
			counter = 0;
		}
		public Dimension getPreferredSize() {

			return new Dimension(dimX, dimY);

		}
		public void paintComponent(Graphics g) {

			g2d = (Graphics2D) g;

			Charakter charakter = new Charakter();
			charakter.drawMe(x, y, g2d);

		}
		public void actionPerformed(ActionEvent e) {
			setState(counter);
			counter = (counter % 10) + 1;
		}
		private void setState(int i) {
			if(i %2 == 1) {
				time+=1;
			}
			else {
				time+=1;
			}

			repaint();

		}
	}
}
Hier die zwei eigentlich wichtigen Parts(Aus dem obigem Script):
Java:
public Dimension getPreferredSize() {

			return new Dimension(dimX, dimY);

		}
		public void paintComponent(Graphics g) {

			g2d = (Graphics2D) g;

			Charakter charakter = new Charakter();
			charakter.drawMe(x, y, g2d);

		}

Hier meine Unterklasse, die anscheinend das Problem verursacht!
Java:
import java.awt.Color;
import java.awt.Graphics;


public class Charakter extends Game {
	
	public void drawMe(int mX, int mY, Graphics g2d){
		g2d.setColor(new Color(Integer.parseInt("EEC591", 16)));
		g2d.fillOval(mX*meter, mY*meter, meter-1, meter-1);
	}

}
 

njans

Top Contributor
Deine logik ist totaler Murx:

Java:
public void paintComponent(Graphics g) {
 
            g2d = (Graphics2D) g;
 
            Charakter charakter = new Charakter();
            charakter.drawMe(x, y, g2d);
 
        }
und
Java:
Charakter extends Game

Jedesmal wenn du einen Charakter erstellst, erstellst du ein neues Fenster, da dieser von Game erbt.
Dann machst du das auch noch in der paintComponent Methode... die wird "ständig" aufgerufen.
 

Toastbot

Mitglied
Gut, soweit verstanden.
Ich hatte das "erben" eher auf werte verstanden und weniger auch auf das erstellen meiner Oberfläche.
Ich würde jetzt eine Klasse erstellen die ich "Variablen" nenne, da pack ich alle variablen rein, und lass dann game und charakter von variablen "erben". So sollte das gehen denke ich.

Danke, und falls ich grad wieder ein Gedankenfehler habe gerne korrigieren.
 

sirkarpfen

Mitglied
Wie mein Vorposter bereits erwähnt hat ist die Logik wirklich nicht gut. Ein Charakter hat nun wirklich nichts gemeinsam mit der Game Klasse (Außer evtl. das er im Spiel vorkommt). Eventuell wäre es angebracht eine Superklasse Entity zu schreiben von der Charakter dann erben kann und die eben alle Allgemeinen Eigenschaften für "Dinge" in deinem Spiel verwaltet.

Alternativ dazu (nicht zu empfehlen) müsstest du den Konstruktor in Game nur mit einem Parameter ausstatten, weil der implizite super()-Aufruf im Konstruktor von Charakter sich immer auf den Standardkonstruktor der Superklasse bezieht (also ohne Parameter).

EDIT: Die Klasse Variablen zu nennen und da einfach alles reinzupacken ist erst recht Murks. Superklassen sollten immer Eigenschaften und Methoden bündeln die auch wirklich im Zusammenhang mit den Subklassen stehen. Eine Superklasse Wesen(Entity) wäre da schon besser von der Namenswahl her. Diese Klasse könnte dann alle Eigenschaften zusammenfassen die Wesen in deiner Spielwelt haben sollten.
 
Zuletzt bearbeitet:

Toastbot

Mitglied
Ok, nehmen wir an ich erstelle eine "Objekte" Klasse, die ein Grundgerüst für alle meine Objekte darstellt,
dann müssten sich darin Sachen wie xKordinate, yKordinate und "Feld Blockiert" befinden.
Klingt soweit gut für mich :)
Ich würde das jetzt mal ausprobieren und mich eventuell morgen nochmal melden, falls sich weitere Probleme bezüglich des "erbens" ergeben ^^.

Danke soweit für die guten Tipps :)
 

JavaGamer

Bekanntes Mitglied
Ok, nehmen wir an ich erstelle eine "Objekte" Klasse, die ein Grundgerüst für alle meine Objekte darstellt,
dann müssten sich darin Sachen wie xKordinate, yKordinate und "Feld Blockiert" befinden.
Klingt soweit gut für mich :)
Ich würde das jetzt mal ausprobieren und mich eventuell morgen nochmal melden, falls sich weitere Probleme bezüglich des "erbens" ergeben ^^.

Danke soweit für die guten Tipps :)

Ich würde an deiner stelle das ganze noch ein wenig umgauben wenn das Game nacher größer wird, also dass du deinen KeyListener in eine externe Klasse auslagerst und das erstellen des Frames auch noch und die Game-Klasse dann nur die Unterklassen aufruft und die Klasse die das Frame/Fenster erstellt aufruft und natürlich auch das rendern und das tick System. Wobei du die render Methode noch in weiteren Klassen verwenden kannst und dann in der render Methode deiner Game Klasse diese aufrufst. Dies wird besonders nützlich wenn du dann eine Entity-Klasse hast aus den alle Charactere erben.
Ich habe dies z.B. so gelöst:

Java:
package de.minecraftplaye.bdh.window;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.Random;

import de.minecraftplaye.bdh.framework.KeyInput;
import de.minecraftplaye.bdh.framework.ObjectID;
import de.minecraftplaye.bdh.objects.Player;

public class Game extends Canvas implements Runnable
{
	
	private static final long serialVersionUID = -1L;

	private boolean running = false;
	private Thread thread;
	
	public static int WIDHT, HEIGHT;
	
	// Object
	Handler handler;
	
	Random rand = new Random();
	
	private void init()
	{
		WIDHT = getWidth();
		HEIGHT = getHeight();
		
		handler = new Handler();
		
		handler.addObject(new Player(100, 100, handler, ObjectID.Player));
		
		handler.createLevel();
		
		this.addKeyListener(new KeyInput(handler));
	}
	
	public synchronized void start()
	{
		if(running)
			return;
		
		running = true;
		thread = new Thread(this);
		thread.start();
	}
	
	public void run()
	{
		init();
		this.requestFocus();
		// your code
	}
	
	private void tick()
	{
		handler.tick();
	}
	
	private void render()
	{
		BufferStrategy bs = this.getBufferStrategy();
		if(bs == null)
		{
			this.createBufferStrategy(3);
			return;
		}
		
		Graphics g = bs.getDrawGraphics();
		
		//////////////////////////////////
		
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, getWidth(), getHeight());
		
		handler.render(g);
		
		//////////////////////////////////
		
		g.dispose();
		bs.show();
	}
	
	public static void main(String[] args)
	{
		new Window(800, 600, "XXXX", new Game());
	}
}
Java:
package de.minecraftplaye.bdh.window;

import java.awt.Dimension;

import javax.swing.JFrame;

public class Window
{
	
	public Window(int w, int h, String title, Game game)
	{
		game.setPreferredSize(new Dimension(w, h));
		game.setMaximumSize(new Dimension(w, h));
		game.setMinimumSize(new Dimension(w, h));
		
		JFrame frame = new JFrame(title);
		frame.add(game);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		
		game.start();
	}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
S Hilfe : Unendlich viele Zufallszahlen erstellen? Java Basics - Anfänger-Themen 8
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
R Zu viele leere Parameter Java Basics - Anfänger-Themen 8
T Variablen Beliebig viele Arrays in Schleife erstellen Java Basics - Anfänger-Themen 1
M Aufgabe: Eine Klasse und viele Untermethoden Java Basics - Anfänger-Themen 30
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
D zu viele MySQL Connections Java Basics - Anfänger-Themen 18
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Beliebig viele Rechtecke erzeugen Java Basics - Anfänger-Themen 5
N Beliebig viele parameter Java Basics - Anfänger-Themen 3
D Viele grafische unterschiede von Windows xp zu Windows 7 Java Basics - Anfänger-Themen 3
T unterschiedlich viele parameter übergeben Java Basics - Anfänger-Themen 5
Prafy Beliebig viele Arrays erstellen? Java Basics - Anfänger-Themen 2
J Methoden Beliebig viele Objekt-Eingabeparameter im Konstruktor Java Basics - Anfänger-Themen 6
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
M Zu viele Verkettungen von Klassen Java Basics - Anfänger-Themen 4
G Erste Schritte Wie viele Montage gab es? Java Basics - Anfänger-Themen 14
M Input/Output Viele short aus Datei lesen und von Little Endian zu Big Endian umwandeln Java Basics - Anfänger-Themen 12
S Variablen viele Instanzvariablen vermeiden Java Basics - Anfänger-Themen 14
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
D Erste Schritte Viele Objekte einer Klasse "verwalten" Java Basics - Anfänger-Themen 17
T Beliebig viele Werte in Array zwischenspeichern Java Basics - Anfänger-Themen 15
S Viele Fragen von einem Anfänger in Java Java Basics - Anfänger-Themen 2
F Viele Controller-Klassen Java Basics - Anfänger-Themen 5
P Datentypen extrem viele Fehler nur irgendwie seh ich den Grund ned... Java Basics - Anfänger-Themen 3
M Viele GUI-Variablen Java Basics - Anfänger-Themen 4
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
U JTable viele möglichkeiten, keine Lösung Java Basics - Anfänger-Themen 5
H Reflexion: Eine Methode, beliebig viele Parameter (Java 1.4.2) Java Basics - Anfänger-Themen 8
M Viele verschachtelte Schleifen Java Basics - Anfänger-Themen 14
Avalarion Erschaffung eines Shadowrun Charaktergenerators - Viele, Viele Fragen! Java Basics - Anfänger-Themen 6
S Viele Konstanten, EnumSet? Java Basics - Anfänger-Themen 3
S Stilfrage: Neue Klasse wenn es in einer Klasse zu viele Methoden gibt? Java Basics - Anfänger-Themen 14
Kasu So viele "_ " ausgeben, wie ein String lang ist Java Basics - Anfänger-Themen 4
I viele Dateinamen in ein String-Array mit File().list() Java Basics - Anfänger-Themen 4
mwildam Textfile lesen und schreiben - so viele Möglichkeiten Java Basics - Anfänger-Themen 5
U Zu viele werte in einer klasse Java Basics - Anfänger-Themen 4
K Viele Fragen eines Anfängers-Fließkommazahlen/Typenwandlung Java Basics - Anfänger-Themen 5
W Viele Objekte mit einem Konstrukor erzeugen Java Basics - Anfänger-Themen 10
R einfaches Programm, viele Probleme Java Basics - Anfänger-Themen 29
G viele zahlen mit wenig code Java Basics - Anfänger-Themen 4
X 1 MySQL-Verbindung und viele Threads Java Basics - Anfänger-Themen 4
E Viele Fragen Java Basics - Anfänger-Themen 8
J viele Objekte erzeugen Java Basics - Anfänger-Themen 21
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
O viele Name mit jeweils zugehörigen Status in .txt Speichern Java Basics - Anfänger-Themen 16
K ResultSet: Wie viele Rows beinhaltet es? Java Basics - Anfänger-Themen 6
X Viele Komponenten automatisch erzeugen Java Basics - Anfänger-Themen 2
C zu viele paint()'s. Java Basics - Anfänger-Themen 6
M Viele Textfelder auslesen Java Basics - Anfänger-Themen 3
P x-viele Variablen anlegen Java Basics - Anfänger-Themen 2
F Mit der Zahl n n-viele Arrays erstellen ?! Java Basics - Anfänger-Themen 4
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
J Überprüfen ob ein Fenster offen ist? Java Basics - Anfänger-Themen 8
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
celta_vigo Konsolen-Fenster ist weg Java Basics - Anfänger-Themen 5
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
S JOptionPane komplett leeres Fenster Java Basics - Anfänger-Themen 4
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
A Fenster bleibt weiß Java Basics - Anfänger-Themen 7
O Fenster programmieren Java Basics - Anfänger-Themen 2
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
A Fenster programmieren Java Basics - Anfänger-Themen 1
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
M aus Fenster anderes Fenster öffnen und wieder umgekehrt Java Basics - Anfänger-Themen 5
J Best Practice DOS Fenster mit Befehlszeile (Lösung) Java Basics - Anfänger-Themen 2
J Fenster wieder unsichtbar machen Java Basics - Anfänger-Themen 2
das_leon Gesamtes Programm in einem Fenster Java Basics - Anfänger-Themen 1
E Knopfdruck neues Fenster öffnen Java Basics - Anfänger-Themen 5
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
K Interface Fenster mit 3 ComboBoxen und 1 Button Java Basics - Anfänger-Themen 13
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
I Fenster A soll Fenster B schliessen Java Basics - Anfänger-Themen 5
D Java Fenster blockiert ? Java Basics - Anfänger-Themen 5
K Erste Schritte Neues Fenster mit Textinhalt öffnen Java Basics - Anfänger-Themen 6
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A Popup-Fenster Java Basics - Anfänger-Themen 1
L Fenster auf Knopfdruck Java Basics - Anfänger-Themen 3
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
O Finally beim Fenster schliessen Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
P Eigenes Fenster erstellen Java Basics - Anfänger-Themen 5
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben