Java JDialog wird schwarz

Borg2of7

Cadet 2nd Year
Registriert
Sep. 2006
Beiträge
17
Hallo Leute!

Ich habe heir ein kleiner Problem mit einer Java Software die ich grade schreibe.
Es geht um folgendes:

Die Software öffnet nach einem Druck auf einen Button einen JDialog. In diesem werden dann eine ganze Latte an Labels und Eingabefeldern Panels hinzugefügt und schlussendlich dann die panels dem Dialog. Soweit so gut. Klappt auch alles soweit. Es passiert aber ständig, dass das Dialog Fenster schwarz wird (siehe Screenshot). Komisch an der Sache ist aber besonders, dass sobald ich das Fenster von Hand resize, der Inhalt komplett da ist. Auch tauchen Teile (die, die durch das Objekt bedeckt sind) des Panels auf, sobald diese sich ändern (also Mouseover oder Klick auf Button oder ähnlichem).

Ich habe schon versucht, repaint(), validate() und pack() auszuführen, bringt aber nichts.

Woran kann das liegen?

Code:
Code Dialog-Erstellung:
AddNewCycleDay addNewCycleDay = new AddNewCycleDay(Const.window, "Zyklustag hinzufügen", true);
				
				
addNewCycleDay.setSize(550,450);
addNewCycleDay.setVisible(true);

Code:
Code Dialog:

public AddNewCycleDay(Frame owner, String title, boolean modal) {
		super(owner, title, modal);
		System.out.println("Generating AddNewCycleDay Window");
		init(); //Hier werden nur ein paar benötigte Daten geladen.
		

		GridBagLayout gbl = new GridBagLayout();
		this.panel.setLayout(gbl);

//addComponent ist eine Statische Methode, die Objekte dem Panel hinzufügt.

		//adding Labels
		
		Const.addComponent(panel, gbl, date, 0, 0, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST); 
		Const.addComponent(panel, gbl, temperature, 0, 1, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, ignoreTemp, 0, 2, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, time, 0, 3, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, cervical, 0, 4, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, cervicalMucus, 0, 5, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, sex, 0, 6, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, disturbingFactors, 0, 7, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, prevention, 0, 8, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, bleeding, 0, 9, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, middlePain, 0, 10, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, breastsymptom, 0, 11, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, notes, 0, 12, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, medicine, 0, 13, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, pregnancyTest, 0, 14, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, ovuTest, 0, 15, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		
		//adding input fields
		Const.addComponent(panel, gbl, dateField, 1, 0, 3, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		//TempField
		Const.addComponent(panel, gbl, tempPreComma, 1, 1, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, comma, 2, 1, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, tempAfterComma, 3, 1, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		//End TempField
		Const.addComponent(panel, gbl, ignoreTempField, 1, 2, 3, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		
		//TimeField
		Const.addComponent(panel, gbl, timeHourField, 1, 3, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, doublePoint, 2, 3, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		Const.addComponent(panel, gbl, timeMinuteField, 3, 3, 1, 1, 0.0, 0.0,
				GridBagConstraints.WEST);
		//End TimeField
		
		
		//ButtonPanel
		Const.addComponent(panel, gbl, buttonPanel, 0, 16, 4, 1, 0.0, 0.0,
				GridBagConstraints.CENTER);
		
		
		
		
		
		this.add(panel);
}

Danke schonmal

Gruß
Borg
 

Anhänge

  • prog.jpg
    prog.jpg
    18,6 KB · Aufrufe: 234
Vielleicht hilfts:
Füge am Ende ein this.pack() ein. Das zwingt das Fenster auf der Stelle alle Components gemäß deinen Angaben zu validieren.
public void java.awt.Window.pack()

Causes this Window to be sized to fit the preferred size and layouts of its subcomponents. If the window and/or its owner are not yet displayable, both are made displayable before calculating the preferred size. The Window will be validated after the preferredSize is calculated.


Btw, wo kommt eigentlich Const her? Ist das etwa ein globales Objekt? O.o
 
Zuletzt bearbeitet:
Mal die paint methode überschreiben und ne ausgabe mit reinpfrimmeln, wann die methode denn tatsächlich aufgerufen wird. Hast du evtl irgendwelche Actionlistener, die den GUI-Thread und damit das Zeichnen blockieren könnten?
Nächste Sache, die interessant wäre, ist dieses mysteriöse 'Const'.
 
"repaint()"(neu zeichnen des Fensters) bzw. "revalidate()"(neu layouten des Fensters) aufgerufen? - Das ist nämlich genau das was intern von Java getan wird wenn du das Fenster resized. Aufruf sollte kurz bevor du das Fenster visible setzt kommen, also auf jeden Fall nach dem Hinzufügen der letzten Komponente.

EDIT:
Achja und poste am Besten mal den gesamten Code. Ich vermisse bei dir z.b. die ContentPane.
 
Zuletzt bearbeitet:
Hi!

Also validate, pack und repaint bringen nichts. Der Fehler taucht trotzdem auf. Nun zum Thema Const... Const ist eine Klasse mit ein paar statischen Methoden und Konstanten.

Was mir auch aufgefallen ist, dass manchmal der Inhalt erst angezeigt wird und es danach erst schwarz wird O.o

@Firestorm:

ContentPane hatte ich irgendwie gar nicht drin. Danke für den hinweiß.


Gruß
Borg
 
Killkrog schrieb:
Mal die paint methode überschreiben und ne ausgabe mit reinpfrimmeln, wann die methode denn tatsächlich aufgerufen wird. Hast du evtl irgendwelche Actionlistener, die den GUI-Thread und damit das Zeichnen blockieren könnten?
...?
 
Mit dem Codesnippet kann man nix anfangen.
Ich würde einmal den Background der Form etc auf unterschiedliche Farben setzen (nicht Schwarz)
Dann mal schauen ob das Schwar zu einer anderen Farbe ändert.

Dementsprechend siehst was neu gepaintet wird und kannst dich rantasten vermutlich ist da irgendwas nicht richtig hinzugefügt.
 
OK,

ich habe jetzt mal noch etwas rumexperimentiert und rausgefunden, dass es nicht am Programm selbst liegt.
Hab das ganze mal auf 2 anderen Rechnern probiert und dort funktionierts einwandfrei. Hab mir danach mal ein kleines Testprogramm geschrieben, welches nur mal einen Message Dialog öffnet und sonst gar nichts tut und, man glaubt es kaum, genau der gleiche Fehler.

Hab danach mal Java neu installiert und alle Treiber auf den neusten Stand gebracht, leider ohne jegliche Verbesserung.
Hat noch jemand irgendwelche Ideen?


Gruß
Borg
 
Sorry Borg2of7, aber so läufts nicht. Wenn du nicht mehr Code hierher zauberst kann dir keiner eine sinnvolle und konstruktive Antwort auf dein Problem liefern, es sei denn er hat eine Glaskugel in die er blicken kann, wovon ich nicht ausgehe.
 
Super, Firestorm, Doublefail. Zum einen braucht man schon seit gefühlten 6 Jahren nicht mehr auf die ContentPane adden, sondern kann direkt add machen, zum anderen hast Du Dir wohl auch seinen letzten Post nicht durchgelesen. Das Problem hat nichts mit dem Code zu tun! Hier streikt einfach die Hardwarebeschleunigung, von der Swing profitieren kann.
Versuch das Programm mal mit dem Parameter: -Dsun.java2d.d3d=false aufzurufen. Dann müsste es funktionuckeln. Solltest Du unter Linux unterwegs sein, also gar kein D3D verfügbar sein, und dieses Problem tritt auf, versuch mal Compiz oder wie der Krempel inzwischen heißt auszuschalten. Eventuell mit neueren Grafiktreiberversionen dann wieder versuchen.

Gruß FatFire
 
Doublefail? - Nene. Fehlerquellen ausschließen heißt das Stichwort.

Aber ansonsten, bin ich mal gespannt ob du nicht auch im Fail landest bei deiner Überzeugung... :)
 
Also nach langem rumsuchen habe ich das Problem gefunden. Der AMD Grafikkartentreiber für meine 6850 verursacht die Probleme. Nach einem Downgrade auf Version 10.11 (also bevor das Catalyst Control Center 2 dabei ist) läufts ohne Probleme.
Auf jedenfall sehr interessanter Fehler. Werde heute mal den AMD-Support anschreiben und dort mal nachfragen was das zu bedeuten hat.
 
Also lag ich mit meiner Vermutung richtig: die Hardwarebeschleunigung streikt. Es müsste dann auch mit beschriebenem Schalter -Dsun.java2d.d3d=false unter neueren Versionen funktionieren. Allerdings dann eben ohne Hardwarebeschleunigung.
Laut einigen Leuten soll es auch einen Unterschied machen, ob man CCC2 installiert oder nicht. Eventuell mal den Catalyst-Treiber ohne Control Center installieren.

Gruß FatFire
 
Zurück
Oben