Doppeltes Fenster

Hallo,

ich habe mir eine ganz normale Klasse erstellt, die von JFrame erbt und ein paar Objekte beinhaltet.
Diese wir in einer anderen Klasse durch
Java:
public static ProjektmanagerWindow pmw = new ProjektmanagerWindow();
"objektiert". Daraufhin öffnen sich allerdings 2 GLEICHE FENSTER, die sich nur im Inhalt unterscheiden. Bei Programmstart soll das Programm aus einer Textdatei lesen und Infos darstellen. Das passiert allerdings nur in einem. Das andere bleibt korrekt aber ohne Informationen leer.

Jemand ne Idee, ohne dass er sich durch den ganzen Code der Klasse lesen muss. Immerhin ist der schon relativ lang für so ein kleineres Problem?

Vielen Dank
 
Ok...

ich habe jetzt schon ziemlich lange an diesem Problem gesessen und kann nicht glauben, dass die Lösung so einfach ist.
Ich habe einfach den Methodenaufruf setVisible in die Klasse geschoben, die auch instanziert. Vorher stand die in der Klasse ProjektmanagerWindow.

Kann mir trotzdem noch jemand erklären, warum das so ist???
 
ich habe mir eine ganz normale Klasse erstellt, die von JFrame erbt und ein paar Objekte beinhaltet.

Erben von JFrame sollte man nicht, sondern eher ein Objekt von JFrame verwenden stattdessen.
Java:
public static ProjektmanagerWindow pmw = new ProjektmanagerWindow();
"objektiert".

Warum verwendest du hier static? Das schreit förmlich nach Problemen :autsch:
Btw: "objektiert"? .... verwende einfach instanziert 😉

Daraufhin öffnen sich allerdings 2 GLEICHE FENSTER, die sich nur im Inhalt unterscheiden. Bei Programmstart soll das Programm aus einer Textdatei lesen und Infos darstellen. Das passiert allerdings nur in einem. Das andere bleibt korrekt aber ohne Informationen leer.

Du wirst wahrscheinlich 2x den Konstruktor dieser Klasse aufrufen.

Jemand ne Idee, ohne dass er sich durch den ganzen Code der Klasse lesen muss. Immerhin ist der schon relativ lang für so ein kleineres Problem?

Trotzdem bei Problemen immer Code bereitstellen, niemand wird sie überlegen wie du es haben könntest usw.
Einfach die Stellen wo die Problemeklasse verwendet wird kopieren und hier bereitstellen (oder auch Problemmethode etc.)

Ich habe einfach den Methodenaufruf setVisible in die Klasse geschoben, die auch instanziert. Vorher stand die in der Klasse ProjektmanagerWindow.
Kann mir trotzdem noch jemand erklären, warum das so ist???

Wie oben schon gesagt wirst du den Konrstruktor unbeabsichtigt 2x aufgerufen haben. Durch das setVisible von außen wird nun nur das richtige anzeigt. Das 2 Objekt dieser Klasse siehst du einfach nicht
(Das ganze ist aber nur eine Vermutung da ich natürlich den Code nicht kenne)
 
Der Code lautet:

Java:
class ProjektmanagerWindow extends JFrame implements ActionListener, ListSelectionListener{
	
	JList projekte; //und weitere Objekte

        ProjektmanagerWindow(){
		JMenuBar mb1 = new JMenuBar();//und weitere Objeket wie Buttons, Menüeinträge etc.

                setDefaultCloseOperation(EXIT_ON_CLOSE);
		setJMenuBar(mb1);
		setSize(1000, 700);
		setLocationRelativeTo(null);
		setTitle("Projektmanager 2");
//		setVisible(true);
	}//ende des Konstruktors... Danach kommen nur noch Methoden

Die aufrufende Klasse beinhaltet:

Java:
public class Handler {

	public static ProjektmanagerWindow pmw = new ProjektmanagerWindow();
	
	public static void main(String[] args) {
		Werkzeug.checkEnviroment();
		Werkzeug.ladeProjekt(0);
		pmw.setVisible(true);
	}

}

Der Konstruktor ist meiner Meinung nach nicht doppelt aufgerufen worden. Was ist da falsch??
 

Zurück
Oben