Java JProgressBar进度条显示空白?请大佬指教是为什么?

 JProgressBar进度条通过手动点击按钮显示空白,但是通过程序点击却正常。请大佬指教问题是出在哪?

图片如下,后附源码。

 

package tmp;

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

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class ProgressTest extends JFrame {

	public static void main(String[] args) throws Exception {
		ProgressTest rf = new ProgressTest();
		rf.setVisible(true);
		// rf.button.doClick();
	}

	private JButton button;
	private JTextField textField;
	private JDialog dialog;
	private JProgressBar progressBar;

	public ProgressTest() {
		button = new JButton("开始");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				textField.setText("");
				dialog.setVisible(true);
				for (int i = 0; i < 100; i++) {
					progressBar.setValue(i);
					try {
						Thread.sleep(111);
					} catch (InterruptedException e1) {
					}
				}
				dialog.setVisible(false);
				textField.setText("222222222222222222");
			}
		});
		textField = new JTextField("111111111111111111");

		getContentPane().add(BorderLayout.WEST, button);
		getContentPane().add(BorderLayout.CENTER, textField);

		progressBar = new JProgressBar();
		progressBar.setStringPainted(true);
		progressBar.setIndeterminate(false);

		dialog = new JDialog(this, "进度条");
		dialog.add(progressBar);
		dialog.setSize(300, 75);
		dialog.setLocationRelativeTo(this);
		dialog.setDefaultCloseOperation(HIDE_ON_CLOSE);

		setSize(600, 120);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

}

 

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class ProgressTestEdit extends JFrame implements ActionListener, PropertyChangeListener {

    public static void main(String[] args) throws Exception {
        ProgressTestEdit rf = new ProgressTestEdit();
        rf.setVisible(true);
        // rf.button.doClick();
    }

    private JButton button;
    private JTextField textField;
    private JDialog dialog;
    private JProgressBar progressBar;
    private Task task;

    public ProgressTestEdit() {
        button = new JButton("开始");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textField.setText("");
                dialog.setVisible(true);

                task = new Task();
                task.start();

            }
        });
        textField = new JTextField("111111111111111111");

        getContentPane().add(BorderLayout.WEST, button);
        getContentPane().add(BorderLayout.CENTER, textField);

        progressBar = new JProgressBar(0, 100);
        progressBar.setValue(0);
        progressBar.setStringPainted(true);

        dialog = new JDialog(this, "进度条");
        dialog.add(progressBar);
        dialog.setSize(300, 75);
        dialog.setLocationRelativeTo(this);
        dialog.setDefaultCloseOperation(HIDE_ON_CLOSE);

        setSize(600, 120);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        // TODO Auto-generated method stub
        for (int i = 0; i < 100; i++) {
            progressBar.setValue(i);
            try {
                Thread.sleep(111);
            } catch (InterruptedException e1) {
            }
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }

    private class Task extends Thread {
        public Task() {
        }

        public void run() {
            for (int i = 0; i <= 100; i += 10) {
                final int progress = i;

                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        progressBar.setValue(progress);
                    }
                });
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                }
            }
        }
    }
}