1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

JProgressBar funzt nicht :(

  • owaye
  • 19. Februar 2008 um 20:42
  • Unerledigt
  • owaye
    6
    owaye
    Mitglied
    Reaktionen
    3
    Punkte
    313
    Beiträge
    46
    • 19. Februar 2008 um 20:42
    • #1

    Huhu.... es bin schon wieder ich mit einem neuen Problem :shinner:

    Ich hoffe ihr könnt mir helfen, ich komm da einfach nicht drauf Oo
    Ich habe eine Schleife, die bis 5 zählt und in kurzen Abständen eine Ausgabe ausgibt. Jeder Schritt der hochgezählt wird, soll auch in der ProgressBar upgedatet werden. Dazu muss ich einen neuen Thread machen, damit das GUI nicht blockiert, also schreibe ich wie folgt:

    Code
    // das ist die zählfunktion
    for(int i=0;i<5;i++)
    {
    	try
    	{
    		Thread.sleep(500);// damit das zählen langsamer vonstatten geht
    	}
    	catch(Exception excelsior){}		
    
    	System.out.println("alle meine entchen " + i);
    
    
    	// Starte den neuen thread1 und übergebe 
    	// 1. die Zahl die grad dran ist in der Schleife
    	// 2. die Gesamtgröße der Schleife (indemfall aber nur 4, weil er ja von 0-4 zählt)
    	new Thread(new thread1(i,4)).start();
    }
    
    
    //TODO Threadklasse!
    public static class thread1 implements Runnable
    {   
    	int arr = 0;
        	int gesamt = 0;
    
    	// bekomme vom Threadstarter die zahl die grad dran ist und das Maximum
        	public thread1(int arraygroesse, int gesamtgr) 
        	{
        		arr = arraygroesse;
        		gesamt = gesamtgr;
        		progress.setMaximum(gesamt); // damit steht nachher in der PG 100%, wenn fertig ist
        	}
    
        	public void run()
            {
        	progress.setValue(arr); //Set value
               progress.repaint(); //Refresh graphics
            }
        }
    }
    Alles anzeigen

    Irgendwas mache ich falsch in den wenigen Zeilen Codes.. das GUI blockiert und am Schluss schreibt er mir 100% an... obwohl ich eigentlich gleichzeitig einen anderen Thread laufen lasse... Weiss jemand wo da der Hund begraben ist? :confused:

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 19. Februar 2008 um 21:08
    • #2

    Hallo owaye,

    Bitte poste doch dein Beispiel als gueltigen Javacode, so das man es selbst ausprobieren und den Fehler nachvollziehen kann. Dann ist es naemlich viel einfacher, Dir bei dem Problem zu helfen.

    lg, ben.

    lg, Benjamin Ferrari, bookworm.at

  • owaye
    6
    owaye
    Mitglied
    Reaktionen
    3
    Punkte
    313
    Beiträge
    46
    • 20. Februar 2008 um 00:22
    • #3

    Hi! Sorry, ja hab schnell das wichtigste zusammengeschrieben im Beispiel. Also wenn man es ausführt und den Button drückt, ist das GUI blockiert; er zählt zwar langsam hoch durch das Thread.sleep(500); aber bedauerlicherweise, zeigt die ProgressBar nichts an, bis er fertig ist mit der Schleife und macht dann plötzlich 100% hin. Also mir wär eben wichtig, dass er den jedesmal wenn eine Iteration der Schleife fertig ist, dass er dies am Fortschrittsbalken anzeigt. Könnte man ja gut brauchen wenn man einen Installer macht und per knopfdruck eine loopschleife durchführt, die nach jedem Schritt, der vollendet ist, die % anzeigt :)

    Java
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    class ProgBar extends JFrame
    {
    	static JProgressBar progress;
    	JButton button1;
    
    	public ProgBar()
    	{
    		getContentPane().setLayout(new BorderLayout());
    		progress = new JProgressBar();
    		progress.setSize(100,40);
    		progress.setStringPainted(true);
    		button1 = new JButton("Execute!");
    		button1.setSize(50,40);
    		button1.addActionListener(new Actlist());	
    		getContentPane().add(progress,BorderLayout.EAST);
    		getContentPane().add(button1,BorderLayout.WEST);
    	}	
    
    	class Actlist implements ActionListener
    	{
    		public void actionPerformed(ActionEvent e)
    		{
    			String label = e.getActionCommand();
    
    			if(label.equals("Execute!"))
    			{
    				for(int i=0;i<5;i++)
    				{
    					try
    					{
    						Thread.sleep(500);// damit das zählen langsamer vonstatten geht
    					}
    					catch(Exception excelsior){}		
    
    					System.out.println("alle meine entchen " + i);
    
    
    					// Starte den neuen thread1 und übergebe 
    					// 1. die Zahl die grad dran ist in der Schleife
    					// 2. die Gesamtgröße der Schleife (indemfall aber nur 4, weil er ja von 0-4 zählt)
    					new Thread(new thread1(i,4)).start();
    				}
    			}
    		}
    	}
    
    	//TODO Threadklasse!
    	public static class thread1 implements Runnable
    	{   
    		int arr;
    	    	int gesamt;
    
    		// bekomme vom Threadstarter die zahl die grad dran ist und das Maximum
    	    public thread1(int arraygroesse, int gesamtgr) 
    	    {
    	    	arr = arraygroesse;
    	    	gesamt = gesamtgr;
    	    	progress.setMaximum(gesamt); // damit steht nachher in der PG 100%, wenn fertig ist
    	    }
    	    public void run()
    	    {
    	    	progress.setValue(arr); // Wert setzen
    	        progress.repaint(); 	// Neu Painten
    	    }
    	}
    
    	public static void main(String args[])
    	{
    		ProgBar demo = new ProgBar();
                    demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		demo.setSize(150,40);
    		demo.pack();
    		demo.setVisible(true);
    	}
    }
    Alles anzeigen
  • owaye
    6
    owaye
    Mitglied
    Reaktionen
    3
    Punkte
    313
    Beiträge
    46
    • 20. Februar 2008 um 17:48
    • #4

    oke hat sich erledigt, hab meine antwort auf basis von folgendem sample code lösen können: http://www.java2s.com/Code/Java/Swin…dforeground.htm

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung