Öffnen und Schließen eines Fensters (mit Synchronisierung)

Status
Nicht offen für weitere Antworten.

jackhammer2k

Mitglied
Hallo erstmal an Alle!
Schön in eurem Forum zu sein! :)

Ich komme momentan nich wirklich weiter, also folgendes:

Ich habe ein extra Fenster mit Fortschrittsbalken und "Abbruch"-Button, welches von einem anderen Fenster gleichzeitig mit einem anderen Thread, der Berechnungen durchführt, gestartet wird.
Das Problem ist, dass das Fenster nicht wieder geschlossen wird, wenn der BerechnungsThread zu schnell vorbei ist (z.B. bei 0 Berechnungen). Wenn es ein wenig Zeit dauert ist es kein Problem.

Das Problem ist hauptsächlich, dass ich ne Menge Umwege gehen muss, weil setVisible(true) blockierend ist, aber kenne keine andere Möglichkeit das zu lösen.

Hier der Code aus der Window mit dem Fortschrittsbalkem (welches geöffnet wird beim erstellen des Fensters und geschlossen wird wenn die Berechnung des anderen Threads fertig ist):
Code:
	private void showWorkingWindow(){
		// Fortschritt-Fenster anzeigen
		(new Thread("AtWorkingWindow"){
			@Override
			public void run() {
				synchronized(syncObject){	// falls Fenster zu spät initialisiert
					syncObject.notifyAll();
				}
				window.setVisible(true);
			}
		}).start();
	}
	
	/**
	 * schließt FortschrittsFenster, wenn schon offen
	 */
	public void hideWorkingWindow(){
		synchronized(syncObject){	// falls Fenster zu spät initialisiert
			while(!window.isVisible()){	// wenn Fenster noch nicht offen/sichtbar
				try {
					syncObject.wait();
				} catch (InterruptedException e) {
					System.err.println(e.toString() + "\t" + e.getCause() + "\t" + e.getStackTrace());
				}
			}
			window.setVisible(false);	// Fenster in Hintergrund/schließen
		}
	}
	
	/**
	 * bricht die Berechnung ab
	 */
	private void abort(){
		comparisionThreadGroup.interrupt();
		window.setVisible(false);	// Fenster in Hintergrund/schließen
	}

Hier noch ein Ausschnitt aus dem Thread, der das Window aufruft und die Berechnungen durchführt:
Code:
		workingWindow = new AtWorkingWindow(MainWindow.getWindow(), comparisionThreadGroup);
		
		try {
			// ...
			// Berechnungen
			// ...

			workingWindow.hideWorkingWindow();

Kann natürlich auch sein, dass der Fehler an anderer Stelle im Programm sitzt, aber das könnte ich mir nicht erklären und ist damit ziemlich unwahrscheinlich.

Ich hoffe ihr könnt mir helfen!

CHRIS
 

André Uhres

Top Contributor
Versuch's mal mit dem "javax.swing.ProgressMonitor", da gibt's die setMillisToDecideToPopup.
Dadurch wird erreicht, daß das extra Fenster mit Fortschrittsbalken erst gar nicht
angezeigt wird, wenn die MillisToDecideToPopup unterschritten werden:
How to Use Progress Monitors
 

jackhammer2k

Mitglied
Danke!

Klingt ganz gut der ProgressMonitor (kannte den nicht). Habs jetzt versucht den einzubauen, aber er will ums verrecken nich funktionieren und ich versteh absolut nicht warum. :bahnhof:

Code:
		progressMonitor = new ProgressMonitor(MainWindow.getWindow(),
	            "Running a Long Task",
	            "", 0, 1000);
		
		progressMonitor.setProgress(0);
                progressMonitor.setNote("bla");
		progressMonitor.setMillisToDecideToPopup(2 * 6000);
		
		try {
/*			(new Thread("WaitForWorkingWindow"){
				@Override
				public void run() {
					if (progressMonitor.isCanceled()) {
					    progressMonitor.close();
					    comparisionThreadGroup.interrupt();
					}
				}
			}).start();
*/
			// Berechnungen

		    progressMonitor.close();

Was soll an dem bisschen Code denn falsch sein?

P.S.: auch wenn ich den ProgressMonitor dann benutzen werde (sofern er irgendwann funzt) würde ich trotzdem ganz gerne wissen, wo der Fehler in meiner Implementierung davor lag (falls den jemand gleich sieht)

CHRIS
 

jackhammer2k

Mitglied
Also ich bin jetzt total verwirrt.

Wenn ich langsam debugge (Schritt für Schritt), dann kommt der ProgressMonitor, aber wenn ich das Programm in seiner normalen Geschwindigkeit ohne Unterbrechung laufen lasse kommt er nicht (obwohl die Berechnungen im Hintergrund lange genug dauern).

:bahnhof:

Please help!?

CHRIS
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Öffnen Schließen Fenster AWT, Swing, JavaFX & SWT 4
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
P JApplet Browser Tab Öffnen AWT, Swing, JavaFX & SWT 5
B Nach dem Öffnen des Dialogs eine Aktion ausführen. AWT, Swing, JavaFX & SWT 6
P Öffnen, Speichern von Dat. über DialogBoxen AWT, Swing, JavaFX & SWT 10
H Öffnen einer Sourcedatei? AWT, Swing, JavaFX & SWT 11
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
C Swing Problem beim 2. Öffnen eines JFrames AWT, Swing, JavaFX & SWT 9
S AWT Speichern von Listkomponenten und Öffnen derer AWT, Swing, JavaFX & SWT 10
L Filechooser File Öffnen AWT, Swing, JavaFX & SWT 4
Q Neuer Thread zum Öffnen AWT, Swing, JavaFX & SWT 2
G JComboBox soll beim Öffnen eine andere JComboBox öffnen AWT, Swing, JavaFX & SWT 3
I Öffnen von anderen Programmen bei Betätigen eines Buttons AWT, Swing, JavaFX & SWT 19
T Öffnen von SWT-Dialogboxen durch HTML-Link in HTML-Code AWT, Swing, JavaFX & SWT 4
A KeyListener funktioniert nicht beim Öffnen von neuem Frame. AWT, Swing, JavaFX & SWT 2
D JTable nach Öffnen-Dialog umbaun AWT, Swing, JavaFX & SWT 5
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
M Image-Preview im Öffnen-Dialog: Performanceprobleme AWT, Swing, JavaFX & SWT 2
X Java Frame Öffnen AWT, Swing, JavaFX & SWT 4
S Öffnen eines JDialog über JMenuItem / Fenster zu viel. AWT, Swing, JavaFX & SWT 2
B Probleme mit Öffnen einer GUI Oberfläche AWT, Swing, JavaFX & SWT 2
F Fensternamen nach Öffnen änderbar? AWT, Swing, JavaFX & SWT 4
P JTree Knoten Öffnen - PER Programm AWT, Swing, JavaFX & SWT 5
D JInternalFrame beim Öffnen nicht aktiv! AWT, Swing, JavaFX & SWT 5
M LookAndFeel? Erst beim 2.Mal Öffnen eines Menüs? AWT, Swing, JavaFX & SWT 3
J Öffnen-Dialog AWT, Swing, JavaFX & SWT 4
G Aktion beim Öffnen und Schliessen eines JInternalFrames AWT, Swing, JavaFX & SWT 4
T Das Windows Fenster "Öffnen" mit Java darstellen AWT, Swing, JavaFX & SWT 9
S Öffnen Dialog mit Swing AWT, Swing, JavaFX & SWT 2
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
S GUI Schließen Button auf der linken Seite AWT, Swing, JavaFX & SWT 2
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
R JFrame schließen AWT, Swing, JavaFX & SWT 9
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
D Geöffnetes Dialogfenster schließen AWT, Swing, JavaFX & SWT 11
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
O Neuen JFrame öffnen und alten schließen AWT, Swing, JavaFX & SWT 7
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
VfL_Freak AWT Browser öffnen und schließen via java.awt.Desktop AWT, Swing, JavaFX & SWT 4
L Event Handling windowAdapter - NullPointerException beim Schließen AWT, Swing, JavaFX & SWT 5
R SWT Wizard schließen AWT, Swing, JavaFX & SWT 2
M Swing Einzelne Fenster schließen AWT, Swing, JavaFX & SWT 2
L SWT Eingabefelder beim Schließen des Forms auslesen AWT, Swing, JavaFX & SWT 3
M Swing ButtonListener Fenster schließen AWT, Swing, JavaFX & SWT 15
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J Swing JInternalFrame schließen ändern? AWT, Swing, JavaFX & SWT 7
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
M Fenster schließen - Listener AWT, Swing, JavaFX & SWT 5
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
S Fremdes Fenster schließen AWT, Swing, JavaFX & SWT 2
E Fenster schließen und ein anderes öffnen AWT, Swing, JavaFX & SWT 9
L Frame Schließen und neustarten AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
Madlip SWT DateTime Widget Schließen AWT, Swing, JavaFX & SWT 4
K beim Schließen des JFrames, Methode aufrufen AWT, Swing, JavaFX & SWT 3
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
J Programm schließen AWT, Swing, JavaFX & SWT 4
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
0 Fenster schließen AWT, Swing, JavaFX & SWT 2
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
S JPopupMenu schließen in SystemTray AWT, Swing, JavaFX & SWT 2
D Fenster schließen AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
F Swing JFrame Methode beim Schließen aufrufen AWT, Swing, JavaFX & SWT 5
2 Zusätzliches Fenster mit OK-Button schließen AWT, Swing, JavaFX & SWT 7
B Fenster schließen AWT, Swing, JavaFX & SWT 4
N Swing Von 2 dimensionalem Array auf JTextfield schließen und färben AWT, Swing, JavaFX & SWT 6
E JWindow bewegen, minimieren, vergrößern und schließen AWT, Swing, JavaFX & SWT 5
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
I Fenster schließen - Button AWT, Swing, JavaFX & SWT 13
S Swing JPopupMenu nicht schließen AWT, Swing, JavaFX & SWT 2
G Swing Fenster schließen AWT, Swing, JavaFX & SWT 6
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
aze FlowLayout:Lücken "schließen" AWT, Swing, JavaFX & SWT 2
D Swing Dialog schließen verhindern bei Fehleingabe AWT, Swing, JavaFX & SWT 2
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2
N JInternalFrame minimieren und schließen AWT, Swing, JavaFX & SWT 2
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
E Fenster schließen über X AWT, Swing, JavaFX & SWT 8
DStrohma JFrame mit WindowListener schließen AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen


Oben