Bessere Aktualisierung eines Frames

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hi,

ich habe folgendes Problem.

Ich habe ein Programm geschrieben, dass relativ viele aufwändige Berechnungen durchführt.
Damit der User nicht denkt, dass das Programm abgestürtzt ist, habe ich ein zweites JFrame erstellt, dass eine ProgressBar anzeigt.
Das Problem ist, die Aktualisierung der ProgressBar wird niicht durchgeführt.
Wie kann ich es machen, dass das getan wird?

So sieht die aufrufende Methode aus:
Code:
                 PixelOfPicture[][] picture = this.picture.getActualPicture();
		
		//initialize the progressbar
		ProgressBar progress = new ProgressBar(numberOfRemovableRows , "Removing horizontal seams");
		progress.setDescription(0, 0);
		
		for(int i = 0; i < numberOfRemovableRows; i++){
			try{
				picture = RemoveSeam.removeSeam(picture,false);
				
				//update the progress bar
				progress.setDescription(0, i);
				progress.setProgressStatus(i);
			}
			catch(UnableToDeleteSeamException UTDSE){
				break;
			}
		}
		
		progress.closeProgressbar();
		
		this.picture.setActualPicture(picture);

Die Progress bar sieht wie folgt aus:
Code:
	public ProgressBar(int maximumValue , String headline){
		this.maximumValue = maximumValue;
		
		//configure the frame
		this.progressFrame = new JFrame();
		this.progressFrame.setSize(400, 80);
		this.progressFrame.setVisible(true);
		this.progressFrame.setTitle(headline);
		
		//configure the progress bar
		this.progressBar = new JProgressBar();
		this.progressBar.setMinimum(0);
		this.progressBar.setMaximum(maximumValue);
		this.progressBar.setValue(0);
		this.progressBar.setSize(380, 15);
		
		//configure the panel
		this.progressPanel = new JPanel();
		this.progressPanel.setSize(400, 30);
		
		//configure the label
		this.progressLabel = new JLabel();
		
		//link all components
		this.progressFrame.add(this.progressBar);
		this.progressPanel.add(this.progressLabel);
		this.progressFrame.add(this.progressPanel);
		
		//set all positions
		this.progressBar.setLocation(5, 25);
		this.progressPanel.setLocation(0, 0);
		this.progressLabel.setLocation((400 - this.progressLabel.getWidth())/2, 10);
		
		//set the location of the window
	    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
	    this.progressFrame.setLocation((screenSize.width - this.progressFrame.getWidth()) / 2 ,
	    							   (screenSize.height - this.progressFrame.getHeight()) / 2);
	}

	public void setDescription(int description , int i){
		switch(description){
			case 0 : progressLabel.setText("Removed " + i + " of " + this.maximumValue + " seams"); break;
			case 1 : progressLabel.setText("Added " + i + " of " + this.maximumValue + " seams"); break;
			default: progressLabel.setText("No description available");
		}
	}

	public void setProgressStatus(int status){
		this.progressBar.setValue(status);
	}

Ich möchte allerdings nicht alzu viel umschreiben (z.B. durch einen thread oder process).
Gibt es eine andere Möglcihkeit?

Danke für eure Hilfe.
 

parabool

Bekanntes Mitglied
1. Die Berechnung in einen Thread packen (ist nicht aufwändig)

2. Bevor der Berechnungsthread gestartet wird, eine Instanz der Klasse Progressbar an diesem
übergeben. (Progressbar als Membervariable in der Berechnungsthread-Klasse)

3 Thread starten

eventuell: - Swingworker.invokeLater einsetzen (ist hier im Forum sicher irgendwo erläutert worden)
- für die Progressbar vielleicht besser JDialog (vielleicht modal ?) verwenden.
 
G

Gast

Gast
Wie mache ich das denn genau?

Habe noch nie mit Threads gearbeitet
 
G

Gast

Gast
Das Problem ist, dass der Algorithmus keine feste Arbeitsmenge hat.
Man kann also frei wählen wie häufig er sich wiederholt.
Wie implementiere ich das in einem Thread?
 

parabool

Bekanntes Mitglied
Hier ein kleines Beispiel von mir:


Code:
import java.awt.event.*;
import javax.swing.*;

interface ProzessListener {
	public void step(int step);
	public void endProzess();
}

class Progress extends JDialog {
	private JProgressBar progressBar;
	Progress(JFrame frame,int anzahl) {
		super(frame);
		this.progressBar = new JProgressBar();
		this.progressBar.setValue(0);
		this.progressBar.setMaximum(anzahl-1);
		this.progressBar.setSize(380, 250);
		this.add(progressBar);
	
		this.setSize(200, 50);
		this.setLocationRelativeTo(frame);
		this.setVisible(true);
	}

	public void step(int i) {
		this.progressBar.setValue(i);
	}

	public void close() {
		this.dispose();
	}
}

class WorkerThread extends Thread {
	private ProzessListener prozessListener;
	private int anzahl;

	WorkerThread(int anzahl) {
		this.anzahl = anzahl;
	}

	public void addProzessListener(ProzessListener prozessListener) {
		this.prozessListener = prozessListener;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		for (int i = 0; i < anzahl; i++) {
			
			try {
				Thread.sleep(300); // simuliert eine längerdauernde Operation
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			prozessListener.step(i);
		}
		try {
			Thread.sleep(1000); // nach Ende noch 1s warten
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		prozessListener.endProzess();
	}
}

public class MainFrame extends JFrame implements ProzessListener,ActionListener {
	private JButton startbuttun;
	private Progress progress;
	private WorkerThread worker;
	private int anzahl = 10;
	
	MainFrame() {
		startbuttun = new JButton("start");
		startbuttun.addActionListener(this);
		startbuttun.setBounds(0,0,100,20);
	
		this.setLayout(null);
		this.add(startbuttun);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationByPlatform(true);
		this.setSize(300, 100);
		this.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		progress = new Progress(this,anzahl);
		worker = new WorkerThread(anzahl);
		worker.addProzessListener(this);
		worker.start();
		startbuttun.setEnabled(false);
	}
	
	public void endProzess() {
		// TODO Auto-generated method stub
		progress.close();
		startbuttun.setEnabled(true);
	}

	public void step(int step) {
		// TODO Auto-generated method stub
		progress.step(step);
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MainFrame();
	}

}


Eigentlich habe ich die Methoden endProzess() usw. im Controller
und die Möglichkeit den Prozess zu beenden (Stop-Button im Progressfenster) .
Habe ich hier aber mal weggelassen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Rekursiver TableModelListener - Bessere Lösung? AWT, Swing, JavaFX & SWT 4
ModellbahnerTT Suche bessere Methode AWT, Swing, JavaFX & SWT 4
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
O JavaFX Aktualisierung der Scene AWT, Swing, JavaFX & SWT 1
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
F Textfeld Währungszahlen und automatische Aktualisierung AWT, Swing, JavaFX & SWT 14
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
S JTable nach aktualisierung - neue Zeile nicht "klickbar" AWT, Swing, JavaFX & SWT 0
T Tetris - Gui Aktualisierung AWT, Swing, JavaFX & SWT 2
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
D JTable Aktualisierung nach hinzufügen eines Datensatzes AWT, Swing, JavaFX & SWT 7
B Problem bei der Aktualisierung des Frames AWT, Swing, JavaFX & SWT 6
lumo SWT Resize und aktualisierung der gui AWT, Swing, JavaFX & SWT 6
B GUI Aktualisierung aus/und eventListener AWT, Swing, JavaFX & SWT 3
S Swing Aktualisierung Fensters AWT, Swing, JavaFX & SWT 7
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
W Swing Aktualisierung des Bildes AWT, Swing, JavaFX & SWT 4
C JTable-Aktualisierung leidiges Thema AWT, Swing, JavaFX & SWT 18
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
U JComboBox: (Vor)auswahl nach Aktualisierung AWT, Swing, JavaFX & SWT 2
kodela Swing Problem mit sofortiger Aktualisierung eine Textfeldes AWT, Swing, JavaFX & SWT 8
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
T Aktualisierung einer JComboBox -> RepaintProblem! AWT, Swing, JavaFX & SWT 3
H Aktualisierung Gui AWT, Swing, JavaFX & SWT 5
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
S Aktualisierung der GUI AWT, Swing, JavaFX & SWT 6
S Aktualisierung in regelmäßigen Abständen AWT, Swing, JavaFX & SWT 2
L Problem mit der aktualisierung von JTree und Text Area AWT, Swing, JavaFX & SWT 22
F Aktualisierung während MOUSE_PRESSED AWT, Swing, JavaFX & SWT 4
M swt - problem mit aktualisierung des tableeditors AWT, Swing, JavaFX & SWT 3
G Aktualisierung der Ausgabe in SWT AWT, Swing, JavaFX & SWT 2
A Aktualisierung eines Bildes innerhalb einer Komponente AWT, Swing, JavaFX & SWT 7
A JTable - Aktualisierung und Spaltenbreite AWT, Swing, JavaFX & SWT 5
D Aktualisierung von GUI AWT, Swing, JavaFX & SWT 11
W JTextArea als Logausgabe und Aktualisierung AWT, Swing, JavaFX & SWT 3
C zu späte aktualisierung/repaint AWT, Swing, JavaFX & SWT 3
X Probleme mit aktualisierung durch Repaint() Methode AWT, Swing, JavaFX & SWT 3
R Thread-Problem (Aktualisierung von JLabel-Komponente) AWT, Swing, JavaFX & SWT 9
M problem mit textfield-aktualisierung AWT, Swing, JavaFX & SWT 4
G JScrollPane problem mit aktualisierung der daten AWT, Swing, JavaFX & SWT 3
L Aktualisierung bei JTabbedPane AWT, Swing, JavaFX & SWT 3
T Swing bei Realtime-Aktualisierung zu langsam? AWT, Swing, JavaFX & SWT 10
M JCombobox aktualisierung, beim wecheseln des Tab JTabbedPane AWT, Swing, JavaFX & SWT 3
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben