JProgressBar opdateres ikke med nye værdier.

Du kan i dette forum stille og svare på spørgsmål vedrørende Java programmering på alle typer platforme.
Besvar
kodeaben
Begynder
Indlæg: 2
Tilmeldt: 22. okt 2015, 12:24

JProgressBar opdateres ikke med nye værdier.

Indlæg af kodeaben » 22. okt 2015, 13:02

Hejsa!
Jeg har et problem med en progress bar i Eclipse. Den modtager de værdier jeg sender men den opdateres ikke med de værdier før while loppet er over. Jeg har søgt på Google men forstår det ikke rigtigt hvad man skal gøre. Nogen der kan hjælpe? Her er lidt flere oplysninger om mit problem:

Kode: Vælg alt

	btnProress.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				progressBar.setMaximum(50000);
				while (counter <= progressBar.getMaximum()){
					
					
					
					randomText = randomText + "t e s t";
					
					System.out.println(counter); //eller System.out.println(progressBar.getValue());
					
					counter++;
					
					progressBar.setValue(counter);
					
					
					
				}
			}
		});
Source code:

Kode: Vælg alt

package sandbox;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JProgressBar;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class testAfProgressBar extends JFrame {

	private JPanel contentPane;
    public int counter;
    private String randomText;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					testAfProgressBar frame = new testAfProgressBar();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public testAfProgressBar() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 131);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JProgressBar progressBar = new JProgressBar();
		contentPane.add(progressBar, BorderLayout.NORTH);
		
		JButton btnProress = new JButton("Start en proces");
		btnProress.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				progressBar.setMaximum(50000);
				while (counter <= progressBar.getMaximum()){
					
					
					
					randomText = randomText + "t e s t";
					
					System.out.println(counter); 
					
					counter++;
					
					progressBar.setValue(counter);
					
					
					
				}
			}
		});
		contentPane.add(btnProress, BorderLayout.CENTER);
	}

}


jepperask
Geni
Geni
Indlæg: 376
Tilmeldt: 4. nov 2012, 17:57

Re: JProgressBar opdateres ikke med nye værdier.

Indlæg af jepperask » 22. okt 2015, 23:54

Kode: Vælg alt

package sandbox;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.JProgressBar;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class testAfProgressBar extends JFrame {

   private JPanel contentPane;
    public int counter;
    private String randomText;
   /**
    * Launch the application.
    */
   public static void main(String[] args) {
      EventQueue.invokeLater(new Runnable() {
         public void run() {
            try {
               testAfProgressBar frame = new testAfProgressBar();
               frame.setVisible(true);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }

   /**
    * Create the frame.
    */
   public testAfProgressBar() {
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setBounds(100, 100, 450, 131);
      contentPane = new JPanel();
      contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
      contentPane.setLayout(new BorderLayout(0, 0));
      setContentPane(contentPane);
      
      JProgressBar progressBar = new JProgressBar();
      contentPane.add(progressBar, BorderLayout.NORTH);
      
      JButton btnProress = new JButton("Start en proces");
      btnProress.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            progressBar.setMaximum(50000);

            Thread t = new Thread() {
            	public void run() {
            		while (counter <= progressBar.getMaximum()) {
            			randomText = randomText + "t e s t";
            			SwingUtilities.invokeLater(new Runnable() {
            				public void run() {
            					progressBar.setValue(counter);
            				}
            			});
            			System.out.println(counter);
            			counter++;
            		}
            	}
            };
            t.start();
         }
         
      });
      contentPane.add(btnProress, BorderLayout.CENTER);
   }
}
"The problem is that you use a loop in the EDT that updates the progress. Until that loop exits, the EDT cannot dispatch events (like repaint, revalidate, invokeLater, mouse events, key events, etc...) preventing it from refreshing the progress bar."
http://stackoverflow.com/questions/1043 ... -it-is-100

kodeaben
Begynder
Indlæg: 2
Tilmeldt: 22. okt 2015, 12:24

Re: JProgressBar opdateres ikke med nye værdier.

Indlæg af kodeaben » 23. okt 2015, 10:40

Tusind tak for hjælpen! :D

Besvar