Panel während Ladevorgang einblenden

Nic.o

Mitglied
Hallo,

Ich hab ein Programm geschrieben das jedemenge ini dateien verarbeiten soll. Dies dauert auch eine Weile. Ich habe meinem Programm gesagt, es soll bei beginn der einlesemethode ein Panel setVisible(true) machen, aufdem ein Ladebalken ist. Nach dem Ladevorgang soll das Panel wieder setVisible(false) gesetzt werden.

Das Problem ist, ich bekomm das Panel nie zu gesicht. Der läd (ca 30 - 40 sec lang) und in dieser Zeit wird aber das Panel nicht eingeblendet. Nur wenn unterm Laden ein Fehler passiert und ein JOptionPane.showMessageDialog eingeblendet wird, schaltet er auf dieses Panel um. Weil der Ladevorgang unterbrochen worden ist. Dannach ist es sofort wieder weg.

Am Zeitlichen ablauf kanns nicht liegen .
1. Panel sichtbar machen
2. Laden und ProgressBar anpassen
3. Panel unsichtbar machen

Wieso funktioniert das dann nicht?
Kennt jemand das Problem vielleicht.
Mein Kollege meinte das dass vielleicht etwas mit Windowsnachrichten zu tun haben könnte (kennt das aber auch nur aus Delphi)

Weiß leider nicht nach was ich da googeln könnte

Danke:)

Grüße Nico
 

xehpuk

Top Contributor
Hier mal ein Code-Beispiel (bin aber selbst noch am Lernen, Anmerkungen also erwünscht!):
Java:
public class ProgressFrame extends JFrame {
	public ProgressFrame() {
		super("ProgressFrame");
		final Container contentPane = getContentPane();
		contentPane.setLayout(new BorderLayout());
		final JPanel progressPanel = new JPanel();
		final JProgressBar progressBar = new JProgressBar();
		progressPanel.add(progressBar);
		progressPanel.setVisible(false);
		final JButton loadButton = new JButton("Load");
		loadButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				new SwingWorker<Integer, Integer>() {
					@Override
					protected Integer doInBackground() throws Exception {
						SwingUtilities.invokeAndWait(new Runnable() {
							@Override
							public void run() {
								loadButton.setEnabled(false);
								progressPanel.setVisible(true);
								pack();
							}
						});
						final Random random = new Random();
						int sleepTime = 0;
						for (int i = 0; i < 10; ) {
							Thread.sleep(sleepTime += (int) (1000 * random.nextFloat()));
							publish(++i * 10);
						}
						return sleepTime;
					}
					@Override
					protected void process(List<Integer> chunks) {
						progressBar.setValue(chunks.get(chunks.size() - 1));
					}
					
					@Override
					protected void done() {
						progressPanel.setVisible(false);
						loadButton.setEnabled(true);
						progressBar.setValue(0);
						pack();
						try {
							System.out.println("Time slept: " + get());
						} catch (InterruptedException e) {
							e.printStackTrace();
						} catch (ExecutionException e) {
							e.printStackTrace();
						}
					}
				}.execute();
			}
		});
		contentPane.add(loadButton, BorderLayout.CENTER);
		contentPane.add(progressPanel, BorderLayout.SOUTH);
		pack();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new ProgressFrame().setVisible(true);
			}
		});
	}
}
 
D

despikyxd

Gast
ich glaube hier sind 2 wichtige fehler drin

1. verarbeitung im EDT
2. anwenden von setVisible auf das JPanel und nicht auf ein JFrame *oder sonstigen top-level-container* das dieses JPanel beinhaltet*

und es wäre sehr hilfreich wenn du mal deinen source posten würdest ... weil ich hab keine kristallkugel
 

Nic.o

Mitglied
Hey,

das mit dem StringWorker werde ich mir mal anschauen.

Source kann ich leider nicht posten, ist ziemlich viel und mindelstens 3 Klassen :)

Grüße
 

Nic.o

Mitglied
Hey,

hat ein bischen gedauert, hab mich da jetzt aber mal reingearbeitet funktioniert auch :) Jetzt ist ein neues Problem aufgetreten:

Hintergrund von der ganzen geshcichte war, ich habe eine Tabelle und eine Methode um diese zu aktualisieren.

Java:
public void buildTableNew(){

        this.TabellenDatenLeeren(); //Entleert die Vectoren die die Tabelle aufbauen
        new BDConn(bar);               //Diese Klasse aktualisiert die Daten in der Datenbank und  
                                                  //benutzt den StrinWorker damit bar (JProgressBar) immer schön  
                                                  //aktualisiert wird
         this.ReadNewData():           //Liest die neuen Daten aus der Datenbank in die Oben geleerten 
                                                  //Vectoren ein
         this.UpdateTable();             //Altualisiert die Ansicht 
}

Problem ist jetzt, da mein Swingworker ja schön im Hintergrund arbeitet, und das ReadNewData schon beginnt bevor der DBConn fertig ist. Dann ist die Datenbank natürlich nur halb voll und es gibt fehler ohne ende.

wie sag ich jetzt dem ReadNewData das es auf DBConn warten soll?

Danke im vorraus

Nico
 

AmunRa

Gesperrter Benutzer
Ein SwingWorker hat die Methoden

isDone() , isCanceled() und die geben dir zurück ob er bereits beendet is. Du könntest ha eine Schleife achen die den solange den aktuellen Thread schlafen schickt , bis der SwingWorker isDone() == true zurückliefert
 

André Uhres

Top Contributor
Hallo Nico,

mit Hilfe eines CountDownLatch kann ein Thread warten, bis eine Reihe von Operationen in anderen Threads ausgeführt sind. Der Thread, der wartet, sollte aber nicht der EventDispatchThread sein, sonst blockiert die GUI.

Gruß,
André
 

Nic.o

Mitglied
Also,

alle wichtigen Sachen in einen Stringworker packen, dann läuft einwandfrei

Danke euch für die Hilfe

Grüße Nico
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
P Herausfinden, auf welchem Panel des CardLayouts man gerade ist? Java Basics - Anfänger-Themen 12
CptK Interface 2 von einander unabhängige Frames mit Panel gleichzeitig nutzen Java Basics - Anfänger-Themen 66
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
N Mehrere Forms auf einem Panel Java Basics - Anfänger-Themen 6
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
J Panel auf Hintergrund Java Basics - Anfänger-Themen 5
J Panel und Menü Java Basics - Anfänger-Themen 6
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
D Hintergrund jpg auf Panel Java Basics - Anfänger-Themen 3
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
A Frage zu einer Methode - Panel arbeitet nicht ordnungsgemäß Java Basics - Anfänger-Themen 2
F Neues Panel und Button unsichtbar Java Basics - Anfänger-Themen 10
D Panel sichtbar/unsichtbar machen im ActionListener Java Basics - Anfänger-Themen 3
S Image in Panel laden Java Basics - Anfänger-Themen 12
D Panel von unten herausfahren Java Basics - Anfänger-Themen 2
S mehrere Rechtecke in ein Panel Java Basics - Anfänger-Themen 2
L panel verschmiert beim draggen! Java Basics - Anfänger-Themen 2
J Panel + Label anzeigen - Ich kriege es nicht hin Java Basics - Anfänger-Themen 3
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
C Panel und Label überdecken sich Java Basics - Anfänger-Themen 2
J JLabels in Panel Aktualisieren Java Basics - Anfänger-Themen 5
H Panel in Variable setzen möglich? Java Basics - Anfänger-Themen 10
M Spezielles Panel fade in / out Java Basics - Anfänger-Themen 5
C Panel Hintergrundfarbe per AdjustmenListenmer ändern Java Basics - Anfänger-Themen 4
D GUI: Panel in Panel laden Java Basics - Anfänger-Themen 10
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
eLogic Panel hinzufügen Java Basics - Anfänger-Themen 4
B PacMan: Panel aktualisieren Java Basics - Anfänger-Themen 2
D Eingabe aus Dialog, Ergebnis an Panel Java Basics - Anfänger-Themen 2
Z JFileChooser/ Panel + Menüproblem Java Basics - Anfänger-Themen 3
J GridLayout auf Panel zentrieren? Java Basics - Anfänger-Themen 2
G Aus eigenem Panel dieses Löschen Java Basics - Anfänger-Themen 2
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
M Panel ersetzen funktioniert nicht Java Basics - Anfänger-Themen 2
M BorderLayout zickt! Ein Panel versteckt das andere! Java Basics - Anfänger-Themen 6
K Panel fixieren und nicht zentrieren Java Basics - Anfänger-Themen 2
F Zeichnen auf einem Panel Java Basics - Anfänger-Themen 2
N Panel entfernen Java Basics - Anfänger-Themen 2
B Zugriff auf JTextPane in einem anderen Panel Java Basics - Anfänger-Themen 2
H TabbedPane: wie schalte ich auf ein bestimmtes panel? Java Basics - Anfänger-Themen 2
G Bild in Panel oder canvas einfügen Java Basics - Anfänger-Themen 3
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
H Paint Methode malt nicht im Panel Java Basics - Anfänger-Themen 4
J Probleme mit Visual Editor Komponenten auf Panel legen Java Basics - Anfänger-Themen 4
M Panel ausgrauen (disable) Java Basics - Anfänger-Themen 2
K Component vom einem Panel löschen ? Java Basics - Anfänger-Themen 14
C Panel wird nicht übermalt Java Basics - Anfänger-Themen 6
P Swing Textarae so groß wie Panel? Java Basics - Anfänger-Themen 2
G Rekursives aufrufen führt zu StackOverflowError Panel durchl Java Basics - Anfänger-Themen 5
T JMenuItems werden von Komponente in Panel verdeckt Java Basics - Anfänger-Themen 11
G Auf ein Panel malen Java Basics - Anfänger-Themen 16
D Event mit n-Button8s) von einem Panel Java Basics - Anfänger-Themen 9
Z Wie übergebe ich einer MyFrame-Klasse ein Panel? Java Basics - Anfänger-Themen 8
A g=panel.getGraphics() im Thread => Nullpointer Java Basics - Anfänger-Themen 9
S Bilder bleiben auf einem Panel nicht gezeichnet Java Basics - Anfänger-Themen 6
L Java Control Panel Java Basics - Anfänger-Themen 5
A Swing Schriftfarbe für komplettes Panel ändern Java Basics - Anfänger-Themen 2
G Panel Java Basics - Anfänger-Themen 4
B Kann man mit XMl ein Panel erstelln Java Basics - Anfänger-Themen 2
R Einfügen einer eigenen methode in ein Panel Java Basics - Anfänger-Themen 5
E Komponenten auf Panel positionieren Java Basics - Anfänger-Themen 3
G aus Thread auf Panel zeichnen Java Basics - Anfänger-Themen 22
G Text in Panel anordnen Java Basics - Anfänger-Themen 6
M Ein Panel in ein Panel laden Java Basics - Anfänger-Themen 3
S Graphic im Panel änder durch JSlider Java Basics - Anfänger-Themen 2
P Ball auf Panel hüpfen lassen Java Basics - Anfänger-Themen 4
T Panel entfernen Java Basics - Anfänger-Themen 4
T Panel entfernen, neues hinzufügen Java Basics - Anfänger-Themen 2
A Probleme mit Panel und GUI Java Basics - Anfänger-Themen 4
D Warum färbt er das unter Panel nicht ein? Java Basics - Anfänger-Themen 3
V Panel durchsichtig machen Java Basics - Anfänger-Themen 4
D Desktop auf nem Panel Java Basics - Anfänger-Themen 6
B Panel bei Mausklick färben Java Basics - Anfänger-Themen 3
S Keyevent in Panel Java Basics - Anfänger-Themen 5
C Add / Remove Panel Java Basics - Anfänger-Themen 2
C zweites Panel auf Knopfdruck anzeigen Java Basics - Anfänger-Themen 2
O größe von panel mit gridlayout Java Basics - Anfänger-Themen 9
G Panel in Methode erneut aufrufen Java Basics - Anfänger-Themen 5
B Panel mit Radiobuttons als eigene Klasse Java Basics - Anfänger-Themen 4
G aktueller Panel, der in BorderLayout.SOUTH angeordnet ist Java Basics - Anfänger-Themen 11
A Panel und getContentPane() ? Java Basics - Anfänger-Themen 2
S panel leeren Java Basics - Anfänger-Themen 2
S Panel / setbounds Java Basics - Anfänger-Themen 3
R Image lässt sich nicht in ein Panel einfügen Java Basics - Anfänger-Themen 3
G Paint auf Panel Java Basics - Anfänger-Themen 4
G JPG in einem Panel anzeigen lassen Java Basics - Anfänger-Themen 3
A Panel überschreiben Java Basics - Anfänger-Themen 4
X GUI: neues Panel in einer Applikation anzeigen lassen Java Basics - Anfänger-Themen 2
G Panel in Container einfügen Java Basics - Anfänger-Themen 7
N need help in panel Java Basics - Anfänger-Themen 8
B Panel mit Bild wird nicht angzeigt Java Basics - Anfänger-Themen 16
M Inhalt Panel,Frame löschen Java Basics - Anfänger-Themen 8
S Image von einem Panel erzeugen! Java Basics - Anfänger-Themen 2
A Komponenten im Panel ausrichten Java Basics - Anfänger-Themen 5
G Panel zur Laufzeit laden/entladen Java Basics - Anfänger-Themen 2
S Neues Fenster/Panel nach Knopfdruck Java Basics - Anfänger-Themen 2
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben