Swing: ContentPane von JDialog ist transparent (Fehler)

Status
Nicht offen für weitere Antworten.
K

Kaffeemaschinist

Gast
Ich hab versucht, einen einfachen Frame/Dialog zu erstellen, in dem nichts anderes angezeigt werden soll als ein JProgressBar und eine Nachricht. Nun hab ich das Stück Code mal darauf abstrahiert, dass nur eine Nachricht im Frame angezeigt wird.

Ergebnis: Der Dialog/Frame wird zwar angezeigt, die ContentPane bleibt aber komplett transparent (sieht aus, wie wenn manchmal irgendwas abschmiert, dann sieht man den Hintergrund, den das Fenster beim Abschmieren angenommen hat, auch die gesamte Zeit durch).

Code:
private static 		JDialog					PROGRESS_FRAME = null;

public static void showProgressWindow () {

		if (PROGRESS_FRAME==null) {
			
			Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
			
			PROGRESS_FRAME = new JDialog(parent,"Work in progress");
			
			JPanel panel = new JPanel(new FlowLayout());
			panel.setOpaque(true);
			
			panel.add(new JLabel("Working, stand by."));
			PROGRESS_FRAME.setContentPane(panel);
			PROGRESS_FRAME.setSize(new Dimension(400,400));
		}
		
		PROGRESS_FRAME.setVisible(true);
		PROGRESS_FRAME.repaint();
		
}

Habe die Vermutung, es könnte an Mischung AWT/Swing liegen, aber nichts derartiges gefunden. Auch ein Repaint() bzw. toFront() hat nichts gebracht, der PROGRESS_FRAME bleibt inaktiv.

Weiß da jmd eine Vorgehensweise?

Grüße,
Kaffeemaschinist
 

Wildcard

Top Contributor
Eine ProgressBar heißt doch normalerweise, das du eine Long Running Operation ausführen möchtest. Meine Vermutung ist: du führst die Operation im UI Thread aus und blockierst ihn damit. In der FAQ ist ein Beitrag zu ProgressBars
 
K

Kaffeemaschinist

Gast
Ne, hier ist ja noch gar kein Progressbar drin, den hab ich mal rausgenommen, um die Fehler einzugrenzen. Außerdem wird der ProgressBar eh im Indeterminate-Modus starten, es soll sich also nur etwas "bewegen".

Im Grunde läuft es etwa folgendermaßen:
Code:
showProgressWindow();
LongRunningOperation();
hideProgressWindow();

Ich hab die LROp mal auskommentiert und dort ein langes Thread-Sleep eingebaut. Das Problem ist nach wie vor das Gleiche: Der Frame mal seine ContentPane nicht, sondern lässt die darunter liegenden Information durchschimmern.
Zusatzinfo: Der Aufruf des PPOGRESS_FRAME (jetzt JDialog) geschieht aus einem anderen JFrame heraus, aber daran sollte es doch nicht liegen, oder?
 

Wildcard

Top Contributor
Klar ist das Problem nach wie vor das gleiche. Ob sleep, oder rechnen, beides blockiert den UI Thread. Die Long Running Operation muss in einem eigenen Thread laufen (siehe FAQ zu Progress Bars).
 

slawaweis

Bekanntes Mitglied
Ergebnis: Der Dialog/Frame wird zwar angezeigt, die ContentPane bleibt aber komplett transparent (sieht aus, wie wenn manchmal irgendwas abschmiert, dann sieht man den Hintergrund, den das Fenster beim Abschmieren angenommen hat, auch die gesamte Zeit durch).
hinter dem ContentPane liegt das RootPane und dahinter der Dialog selber, d.h. es wäre egal, ob der ContentPane transparent wäre. Es klingt ganz nach einem Thread-Problem. Ich würde versuchen zum Test den Dialog einmal nicht Modal zu machen und einmal ohne Parent zu starten. Wenn der Dialog danach normal erscheint, kann man weiter das Problem ergründen.

Code:
		PROGRESS_FRAME.setVisible(true);
		PROGRESS_FRAME.repaint();

der Dialog blockiert bereits in setVisible(true), repaint() wird also erst nach dem Beenden des Dialogs aufgerufen.

Slawa
 

slawaweis

Bekanntes Mitglied
Ergebnis: zwischen show und hide ist die GUI Blockiert und verarbeitet keine Events mehr.
ich habe es so verstanden, dass sein PROGRESS_FRAME auch blokiert ist:

Ergebnis: Der Dialog/Frame wird zwar angezeigt, die ContentPane bleibt aber komplett transparent (sieht aus, wie wenn manchmal irgendwas abschmiert, dann sieht man den Hintergrund, den das Fenster beim Abschmieren angenommen hat, auch die gesamte Zeit durch).

Slawa
 

Wildcard

Top Contributor
Ist er ja auch, es gibt nur einen UI Thread. Hat allerdings nichts mit Modalität zu tun, daher wird der vorgeschlagene Test kein Resultat erbringen.
 
K

Kaffeemaschinist

Gast
Nochmal zur Klarstellung: Ich lasse keine Operation laufen. Mittlerweile hab ich das Problem soweit eingedämmt, dass ich wirklich nur einen Dialog mit einem Label drin anzeige. Trotzdem ist die RootPane voll transparent.
 
K

Kaffeemaschinist

Gast
Code:
if (isKonstruktives(Verjigorm.getKommentar())) {
	schreibeInThread();
} else {
	KommentarUmleitung("/dev/null");
}

Das Problem lag anscheinend daran, dass das Fenster, bevor es gezeichnet wurde, von einer Zeichen-Aktion in einem Frame des aktuellen UI Thread verdrängt wurde.

Jetzt zum eigentlichen: (ich vermute mal, das passt noch zum Topic, wenn nicht, ansagen und ich eröffne es an unter neuem Thread und entfern es hier)
Ich führe eine längere Datenbankaktion durch, die ich aus einer Swing-GUI starte und deren Resultat natürlich angezeigt werden soll. Während die DB-Aktion leiert, soll der Nutzer durch einen Progressbar (einfach nur ein bewegtes Objekt, muss nicht durch den Worker geupdatet werden) beschäftigt sein, soll also nicht weiter in der GUI herumklicken "dürfen". Letzteres geht, wie vorgeschlagen durch den modalen Dialog, problemlos.

Dazu meine Idee:

Code:
	MySwingWorker worker = new MySwingWorker(Object[] params);
	worker.execute(); /* läuft in einem Extra-Thread */
	showModalDialogWithProgressBar(); 
	
	boolean success = false;
	try {
		/* Problem: ich warte blockierend, und der ModalDialog wird nicht mehr neu gezeichnet */
		success = worker.get();
	} catch (Exception e) {
		OMFG!!!
	}
	/* hier liegt das Ergebnis an, also den ModalDialog "abschießen" */
	closeModalDialogWithProgressBar();
	
	...

Nun läuft der Worker im Hintergrund, beim Abwarten des Endes des Workers hab ich aber wieder eine Blockade, die vermutlich dafür sorgt, dass der ModalDialog nicht geupdatet werden kann (passiert z.B. beim Verschieben des Inhalts).

Sollte ich besser mit publish() arbeiten und dort abfangen, wenn der Worker durch ist? Oder gibt es dafür insgesamt eine viel einfachere Herangehensweise?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing mit ContentPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben