[JFrame] Exception - woher?

Lacritz

Mitglied
Heyho lieber Java Freunde,

Ich hab immoment Semesterferien und wollte meine Zeit ein wenig mit dem Programmieren von kleineren Java Spielen versüßen.

An sich bin ich derzeitig daran eine Oberfläche mit Frame aufzubauen - diese ist wie Folgt bisher:

CLASS1:

Code:
package net.Lacritz.td;

import javax.swing.JFrame;

public class Frame extends JFrame{
	
	public static void main(String[] args){
		new Frame();
	}
	
	public Frame(){
		
		new JFrame();

		this.setTitle("Lacritz");
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
	 //	this.setSize(800, 600);
		this.setSize(1680, 1050);
	 //	this.setExtendedState(MAXIMIZED_BOTH);
		
		this.setUndecorated(true);
		this.setResizable(false);
		this.setVisible(true);
	 //	this.setLocationRelativeTo(null); 	
	 	
	
		Screen screen = new Screen(this);
		this.add(screen);
	}
		
}

CLASS2:

Code:
package net.Lacritz.td;

import java.awt.Graphics;
import javax.swing.JFrame;

public class Screen extends JFrame implements Runnable {

	Thread thread = new Thread(this);
	private int fps = 0;
	Frame frame;
	
	// uebergabe

	public Screen(Frame frame) {
		
		this.frame = frame;
		thread.start();
	}
	
	public void paintComponent(Graphics g){
		g.clearRect(0, 0, this.frame.getWidth(), this.frame.getHeight());
		
		
		g.drawString(fps + "", 10, 10);
	}
	

	public void run() {
		System.out.println("(Success) FRAME CREATED");
		
		long lastFrame = System.currentTimeMillis();
		int frames = 0;

		// Game Loop
		// Actually where the game is in 
		
		while (true) {
			repaint();
			
			frames++;
			
			if(System.currentTimeMillis() - 1000 >= lastFrame){
				fps = frames;
				frames = 0;
				lastFrame = System.currentTimeMillis();
			}
			
			// maximize the FPS to 500

			try {
				Thread.sleep(2);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

Die Exception:

Code:
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
	at java.awt.Container.checkNotAWindow(Container.java:429)
	at java.awt.Container.addImpl(Container.java:1038)
	at java.awt.Container.add(Container.java:958)
	at javax.swing.JFrame.addImpl(JFrame.java:540)
	at java.awt.Container.add(Container.java:363)
	at net.Lacritz.td.Frame.<init>(Frame.java:29)
	at net.Lacritz.td.Frame.main(Frame.java:8)

Bisherige Probleme mit dem ganzen:

Zum einen lässt sich in Frame das "this.setExtendedState(MAXIMIZED_BOTH);" nicht benutzen (wenn ich das benutze ist natürlich das darüber liegende "setSize." auskommentiert.

zum anderen sollte durch Screen ja eine FPS Anzeige im JFrame zu sehen sein, diese ist ebenfalls nicht zu sehen - habe es auch mit anderen Positionen versucht (sprich die Werte hinter "fps + "" "geändert) - jedoch immer noch nichts zu sehen.

Programmieren tue ich auf OS X mit einem Macbook Pro Retina 13' (Falls die Auflösung hier relevant seien sollte) & als IDE benutze ich Eclipse.

Hoffe das mir jemand helfen kann & bedanke mich recht herzlich schon im Voraus.

Mit freundlichen Grüßen Lacritz
 
Also erstmal ergibt dein
Java:
new JFrame()
im Frame Konstruktor keinen Sinn.. Du erstellst in der main ein Frame und in dem erstellst du dann wieder ein Frame (was nicht angezeigt wird). Der Frame Konstruktor erstellt dein Fenster doch bereits.

Deine Screen Klasse ist selbst ein Fenster was dein Hauptfenster als Parameter übergeben bekommt und das versuchst du dann wiederum dem Hauptfenster zu adden...
Java:
this.add(screen);
Das macht keinen Sinn. Ich verstehe nicht ganz was du erreichen willst, aber warum machst du aus Screen kein JPanel?
 
Es sollte auch eigentlich ein JPanel sein - wäre mir wahrscheinlich selber nicht mehr aufgefallen ,dass ich da extends JFrame stehen hatte. Dank dir dafür schonmal!

Auch wenn ich es jetzt ein JPanel ist wird mir die FPS nicht angezeigt, woran könnte das liegen?

Zum anderen kann ich das Fenster nicht maximieren mit dem Befehl der auskommentiert ist:

// this.setExtendedState(MAXIMIZED_BOTH);

Hätte das ganze eigentlich gerne als Vollbild unter OS X laufen, jemand Vorschläge?
 
Code:
package net.Lacritz.td;

import javax.swing.JFrame;

public class Frame extends JFrame{
	
	public static void main(String[] args){
		new Frame();
	}
	
	public Frame(){
		
		Screen screen = new Screen(this);
		this.add(screen);
		
		this.setTitle("Lacritz");
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
	//	this.setSize(800, 600);
		this.setSize(1680, 1050);
	//	this.setExtendedState(JFrame.MAXIMIZED_BOTH);
		
		this.setUndecorated(true);
		this.setResizable(false);
		this.setVisible(true);
	//	this.setLocationRelativeTo(null); 	
	 	
	}
		
}

Hier einmal die Lösung des JPanel Problems, somit sind 2 von 3 Problemen Geschichte!
Würde mich freuen wenn jemand zu dem Problem des Maximieren mir weiterhelfen könnte

Mit freundlichen Grüßen Lacritz
 
Das erst garkein Fenster erscheint, soll das da übrigens heißen.

Ich gehe davon aus , Dadas Maximieren mit extendedState hierbei evt. das Fenster zu groß macht , sprich außerhalb des anzeigbaren & daher wird das einfach komplett nicht mehr angezeigt
 

Neue Themen


Zurück
Oben