ProgressBar

Status
Nicht offen für weitere Antworten.

crazy_N

Mitglied
Der Fortschrittsbalken wird nicht während der Ausführung der Bearbeitungsklasse gleichzeiig aktualisiert. Warum?

Code:
//dies ist eine innere Klasse der Gui und ruft die Methoden der Bearbeitungsklasse auf 

  class MedThread extends Thread
  {
    public void run ()
    {
      long startTime=System.currentTimeMillis();

      String inputBildStr = eingabeField.getText();
      String outputBildStr = ausgabeField.getText();
      FilterGray test = new FilterGray (inputBildStr);

      String str = pixelField.getText();
      int z = Integer.parseInt(str);
      test.filter(z);  // hier wird der Bildfilter aufgerufen

      test.write(outputBildStr);
      long endTime=System.currentTimeMillis();
      long diff=endTime-startTime;
      timeField.setText(String.valueOf(diff)+" ms");

      image2 = Toolkit.getDefaultToolkit().getImage( outputBildStr );
      scaled = scale(image2);
      outputBild = new JLabel(new ImageIcon(scaled));

      middle.remove(empty);
      middle.add(outputBild);
      middle.validate();
    }
  }

// dies passiert wenn der startbutton gedrückt wird

  class GoLauscher implements ActionListener
 {
   public void actionPerformed(ActionEvent e)
   {
     MedThread thread = new MedThread();
     thread.start();
     FilterGray.go = true;
     progressBar.setMaximum(1120);
     while (FilterGray.go == true)
     {
       try  // hier wird die GUI nicht aktualisiert
       {
         Thread.sleep(1000);
         progressBar.setValue(FilterGray.progress);
         progressBar.validate();   // das ändert nix
         progressPanel.validate();  // das ändert auch nix 
         System.out.println(FilterGray.progress);  // diese Werte werden korrekt zurückgegeben
       }
       catch (InterruptedException f)
       {
         return;
       }
     }
   }
 }

// der benötigte Teil der Bearbeitungsklasse (FilterGray)

  public void filter(int x)
  {
    go = true;
    LinkedList list = new LinkedList();  // Liste anlegen
    progress = 0;  //progressbar zähler 0 setzen
    max = (inImage.getWidth()-x);  //progressbarmaximum ermitteln
    for(int i=x; i<inImage.getWidth()-x; i++)
    {
      progress = i;  //progressbarzähler erhöhen
      for(int j=x; j<inImage.getHeight()-x; j++) // Bild durchgehen
      {
        int h, w, count = 0;
        w = h = x*(-1);
        int a = ((2*x+1)*(2*x+1));
        for (; count<a; count++) // umliegende Bildpunkte berechnen
        {
          int br=(inImage.getRGB(i+w, j+h) >> 16) & 0xff;
          list.add(new Integer(pixels[i-w][j-h])); // Bildpunkt in Liste einfügen
          if (w==x)
          {
            w = x*(-1);
            h++;
          }
          else
            w++;
          if (h>x)
          {
            h = x*(-1);
          }
        }
        int value = ((Integer)QuickSelect.quickSelect(list,list.size()/2+1)).intValue();  // mittleres Element mittels QuickSelect suchen
        poxels[i][j]= value; // Wert in AusgabeBild einfügen
      }
    }
    go = false;
  }
 
B

Beni

Gast
Vielleicht kann Dir ein kleines Beispiel helfen...

Code:
import java.lang.reflect.InvocationTargetException;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

public class Main{
	public static void main( String[] args ){
		JFrame frame = new JFrame( "Thread" );
		JProgressBar bar = new JProgressBar();
		frame.getContentPane().add( bar );
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.pack();
		frame.setLocationRelativeTo( null );
		
		bar.setMaximum( 500 );
		frame.setVisible( true );
		
		Updater updater = new Updater( bar );
		updater.start();
	}
	
	private static class Updater extends Thread{
		private JProgressBar bar;
		public Updater( JProgressBar bar ){
			this.bar = bar;
		}
		
		public void run(){
			for( int i = 0; i < 500; i++ ){
				final int index = i;
				try {
					SwingUtilities.invokeAndWait( new Runnable(){
						public void run() {
							bar.setValue( index );
						}
					});
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				} catch (InvocationTargetException e1) {
					e1.printStackTrace();
				}
				
				
				try {
					Thread.sleep( 50 );
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
 

crazy_N

Mitglied
Danke dir erstmal. Sieht schick aus :)

Aber im Moment bekomm ich nix mehr auf die Reihe, das wird ne Mission für morgen.

Aber noch ein paar Gedankengänge:

* Wenn ich auf go klicke, wird der thread gestartet (Bild laden, filtern und Speichern) und gleichzeitig wird die GoLauscher Klasse weiter abgearbeitet.

* während der Bildverarbeitung wird dann in der Go Klasse der Progressbar in der while Schleife aktualisiert, solange die Bildverarbeitung läuft

* Go ist dann abgearbeitet und es läuft dann die Bildspeicherung in meiner Verarbeitungsklasse (Thread) und der Thread ist dann fertig

Wo ist der Fehler in meinem Gedankengang?
 
B

Beni

Gast
Code:
class GoLauscher implements ActionListener
{
 public void actionPerformed(ActionEvent e)
 {
   MedThread thread = new MedThread();
   thread.start();
   FilterGray.go = true;
   progressBar.setMaximum(1120);
   
   Thread thread = new Thread(){
   	public void run(){
   
   		while (FilterGray.go == true)
   		{
   			try  // hier wird die GUI nicht aktualisiert
			{
   				Thread.sleep(1000);
   				progressBar.setValue(FilterGray.progress);
   				progressBar.validate();   // das ändert nix
   				progressPanel.validate();  // das ändert auch nix
   				System.out.println(FilterGray.progress);  // diese Werte werden korrekt zurückgegeben
			}
   			catch (InterruptedException f)
			{
   				return;
			}
   		}
   	}
   };
    thread.start();
 }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX ProgressBar AWT, Swing, JavaFX & SWT 10
T Starten des Programms mit dem Progressbar AWT, Swing, JavaFX & SWT 2
L Progressbar Laufzeitveränderung AWT, Swing, JavaFX & SWT 4
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
B JavaFX Textfields: Fortschritt als ProgressBar und Progressindicator AWT, Swing, JavaFX & SWT 5
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
I JavaFX Im Controller die ProgressBar mit Task updaten AWT, Swing, JavaFX & SWT 6
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Z ProgressBar in Eclipse mit Wizard page? AWT, Swing, JavaFX & SWT 1
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
H Nimbus ProgressBar Colors AWT, Swing, JavaFX & SWT 9
P Swing Die ProgressBar wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
B SWT Progressbar mit Textoverlay? AWT, Swing, JavaFX & SWT 3
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
T Prozessstatus in Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Swing Progressbar aktualisiert sich nicht AWT, Swing, JavaFX & SWT 17
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
V Swing Progressbar Problem AWT, Swing, JavaFX & SWT 14
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
Tobse LookAndFeel [Windows7] Nativ aussehnde ProgressBar AWT, Swing, JavaFX & SWT 13
J Progressbar mit einfacher Funktion AWT, Swing, JavaFX & SWT 6
D Progressbar AWT, Swing, JavaFX & SWT 5
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
S Upload Progressbar AWT, Swing, JavaFX & SWT 3
S Dateien kopieren mit ProgressBar AWT, Swing, JavaFX & SWT 6
S Swing ProgressBar AWT, Swing, JavaFX & SWT 3
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
D SWT JFace Wizard Progressbar AWT, Swing, JavaFX & SWT 4
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
ModellbahnerTT Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
P Progressbar in java AWT, Swing, JavaFX & SWT 3
K Frage zu ProgressBar, SwingWorker etc. AWT, Swing, JavaFX & SWT 4
V ProgressBar AWT, Swing, JavaFX & SWT 5
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
M Bug; Swing-Worker, Progressbar und Mouse AWT, Swing, JavaFX & SWT 22
P [SWT] - ProgressBar, Prozentzahlen live anzeigen geht nicht AWT, Swing, JavaFX & SWT 13
P JTable sortiert ProgressBar nicht AWT, Swing, JavaFX & SWT 8
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
B Eine Alternative zur Steuerung einer ProgressBar? AWT, Swing, JavaFX & SWT 5
N ProgressBar --> brauche Hilfe AWT, Swing, JavaFX & SWT 4
G Progressbar aktualisiert sich nicht (vernünftig). WIESO? AWT, Swing, JavaFX & SWT 2
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
M Bild laden + ProgressBar AWT, Swing, JavaFX & SWT 2
C Problem mit ProgressBar AWT, Swing, JavaFX & SWT 4
thE_29 Problem mit ProgressBar AWT, Swing, JavaFX & SWT 2
M ProgressBar in einem Thread? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben