JDialog anzeigen beim öffnen einer Datenbank

Status
Nicht offen für weitere Antworten.

Onkel Hatti

Bekanntes Mitglied
Moin Alle.

Ich brings nicht hin...

Folgendes. Ich habe einen Frame, in dem mein Programm abläuft. Zu Anfang möchte ich nach dem die GUI initialisiert wurde, eine Datenbank öffnen. Je nach Inhalt kann das dauern. Daher möchte ich einen Dialog ausgeben, der mir Bescheid gibt, daß die Datenbank gerade geöffnet wird.
Aber solange die Datenbank geöffnet wird, wird zwar der Dialogfensterrahmen angezeigt, aber nicht der Inhalt. Erst wenn die Datenbank geöffnet ist, dann wird der Dialoginhalt angezeigt.

Ich habs mit Threads versucht, mit SwingUitilities.invokeLater() und dem SwingWorker-Thread.
Ich brings nicht hin. Immer das Gleiche.

Kann mir jemand helfen?

Dankeschön
Hatti

Das Hauptprogramm.

Code:
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

public class DBTest extends javax.swing.JFrame {

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				DBTest inst = new DBTest();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public DBTest() {
		super();
		initGUI();
		openDB();
	}
	
	private void openDB()
	{
		WaitDialog wd=new WaitDialog(this);
		wd.setLocationRelativeTo(this);
		new Thread(wd).start();
		DataBase db=new DataBase("d:\\tmp\\testbase");
		db.createConnection();
		
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Die Klasse der Datenbank:

Code:
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import javax.swing.JOptionPane;


public class DataBase{

	private String dbName;

	public DataBase(String db)
	{
		super();
		dbName=db;
	}

	public boolean createConnection()
	{
		if(!new File(dbName).exists())
		{
			return false;
		}
		try
		{
			Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
		}
		catch (Throwable c)
		{
			 return false;
		}
		try
		{
			String crProp="";
            Properties props = new Properties();
            props.put("user", "lookinfo");
            props.put("password", "lookinfo");
            Connection dbConn;

			dbConn = DriverManager.getConnection("jdbc:derby:"+dbName+crProp, props);
		}
		catch (SQLException s)
		{
			return false;
		}
		return true;
	}
}

und die Dialogklasse

Code:
mport java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class WaitDialog extends javax.swing.JDialog implements Runnable{
	private JLabel jLabel1;

	public WaitDialog(JFrame frame) {
		super(frame);
		initGUI();
	}
	
	private void initGUI() {
		try {
		        getContentPane().add(getJLabel1(), BorderLayout.CENTER);
			this.setSize(263, 158);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void run()
	{
	     this.setVisible(true);
	}
	
	private JLabel getJLabel1() {
		if(jLabel1 == null) {
			jLabel1 = new JLabel();
			jLabel1.setText("Datenbank wird geöffnet");
			jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
		}
		return jLabel1;
	}
}
 
B

Beni

Gast
SwingWorker, bzw. Threads, liest sich schonmal gut. Derzeit wird dein "dbCreateConnection" im EDT (Event Dispatcher Thread) ausgeführt, dieser EDT ist auch für das Neuzeichnen der GUI zuständig. Der ist also blockiert, und deshalb siehst du nichts.

Was du machen musst, ist "dbCreateConnection" in dem anderen Thread (oder noch besser, dem SwingWorker) laufen zu lassen. Es nützt hingegen nichts, den WaitDialog auszulagern, der wird nämlich trotz allem von EDT gezeichnet.
 

Onkel Hatti

Bekanntes Mitglied
Ahh, fast verstanden, glaube ich.
Der EDT ist für die gesamte Swing-GUI zuständig, und davon gibt es nur einen. Auch wenn ein GUIteil in einem anderen Thread arbeitet. Ich muss also den EDT quasi frei halten von zeitraubenden Aufgaben, die die Swing-GUI stören könnten, d.h. ich muss die "Nicht-GUI" Aufgaben in einen Thread auslagern und ggf. dem EDT Dinge über SwingUtilities.invokeLater mitteilen, damit sie in der GUI gezeichnet werden.

Hab ich das so richtig kapiert?

Danke schon mal.
Hatti
 
B

Beni

Gast
Jop, da liegst du richtig.

Auf die GUI sollte man nur aus dem EDT aus zugreiffen, sonst kann es zu üblen Nebeneffekten kommen. Also du kannst aus der GUI aus einen zusätzlichen Thread starten, aber du musst dann immer (bis auf ganz wenige Ausnahmen die zu suchen es sich nicht lohnt) mit invokeLater oder invokeAndWait auf die GUI zugreiffen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
S JDialog in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 3
D Modalen JDialog anzeigen AWT, Swing, JavaFX & SWT 3
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
D Button auf geöffnetem JDialog AWT, Swing, JavaFX & SWT 5
N Definitionen JDialog AWT, Swing, JavaFX & SWT 7
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
S Jframe aus JDialog starten AWT, Swing, JavaFX & SWT 4
M JDialog übergibt eingaben nicht an aufrufende klasse AWT, Swing, JavaFX & SWT 15
S Assistent im JDialog AWT, Swing, JavaFX & SWT 7
H Swing JDialog cannot be resolved as a typ AWT, Swing, JavaFX & SWT 12
C Swing JDialog "flutet" den Arbeitsspeicher AWT, Swing, JavaFX & SWT 9
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
C Swing JDialog Ladebildschirm wird nicht angezeit AWT, Swing, JavaFX & SWT 5
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
A Swing JDialog KeyBindings und Textfelder AWT, Swing, JavaFX & SWT 5
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
S Schrift ändern in JDialog AWT, Swing, JavaFX & SWT 3
S Problem mit JDialog AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
hdi Swing Genaue Funktionsweise von modalem JDialog? AWT, Swing, JavaFX & SWT 11
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
Ollek JDialog Koponenten neu anordnen AWT, Swing, JavaFX & SWT 3
A JDialog AWT, Swing, JavaFX & SWT 10
Dit_ SwingUtilities.invokeLater und Modaler JDialog AWT, Swing, JavaFX & SWT 11
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A JDialog ausdrucken AWT, Swing, JavaFX & SWT 7
aze JDialog mit runden ecken AWT, Swing, JavaFX & SWT 8
Dit_ JDialog nur horizontal vergrößern AWT, Swing, JavaFX & SWT 3
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
H JDialog, Modal - Klassenübergreifend => Problem AWT, Swing, JavaFX & SWT 5
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
B JDialog AWT, Swing, JavaFX & SWT 6
J Swing Probmel mit JDialog (Modal/FocusLost/Button) AWT, Swing, JavaFX & SWT 5
E Swing Fehlerhaftes Verhalten bei gleichzeitigen Verwendnen von PopUpMenu und JDialog?! AWT, Swing, JavaFX & SWT 5
E Daten von JDialog nach JFrame übertragen AWT, Swing, JavaFX & SWT 4
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
BattleMaster246 JDialog erscheint in der Taskbar AWT, Swing, JavaFX & SWT 7
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
X Swing JDialog von JInternalFrames überlappen lassen AWT, Swing, JavaFX & SWT 2
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
A JFrame oder JDialog AWT, Swing, JavaFX & SWT 12
B Swing JDialog : Herausfinden wie dieser beendet wurde? AWT, Swing, JavaFX & SWT 2
T JDialog ohne Fenstermanager? AWT, Swing, JavaFX & SWT 2
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
K Swing JDialog ohne Titlebar mit Rahmen AWT, Swing, JavaFX & SWT 5
KrokoDiehl Swing KeyEvents für JDialog / JFrame AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben