我写如下语句:
for (int i = 0 ; i<amount ; i++){
    jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
}显示的时候只显示最后的100%的一个界面
我想让这个JTextField随时刷新显示(或每加1%就刷新显示一次之类的也行),怎么办?
因为这个工作可能会处理很长时间。

解决方案 »

  1.   

    通过线程控制。public void run()
    {
       while(i<amount)
       {
          jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
          try
          {
             Thread.sleep(35);
          }
          catch(InterruptedException e){}
          i++;
       }
    }
      

  2.   

    通过线程控制。public void run()
    {
       while(i<amount)
       {
          jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
          try
          {
             Thread.sleep(30);//30--the length of time to sleep in milliseconds.       }
          catch(InterruptedException e){}
          i++;
       }
    }
    -----
    呵呵^_^
      

  3.   

    for (int i = 0 ; i<amount ; i++){
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
       jtf.setText(...);
    }
    });
    }
      

  4.   

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;public class RefreshTest {
        public static void main(String[] args) {
            final JTextField tf = new JTextField(40);
            JButton btn = new JButton("Start");
            btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    new Thread() {
                        public void run() {
                            final int amount = 100;
                            for (int i = 0; i < amount; i++) {
                                final int t = i;
                                SwingUtilities.invokeLater(new Runnable() {
                                    public void run() {
                                        tf.setText("共有" + amount + "户,目前处理第" + (t + 1)
                                                + "户,已完成" + ((t + 1) * 100 / amount) + "%");
                                    }
                                });
                                try {
                                    Thread.sleep(10);
                                } catch (InterruptedException e) {
                                }
                            }
                        };
                    }.start();
                }
            });        JFrame f = new JFrame();
            f.getContentPane().add(tf, BorderLayout.CENTER);
            f.getContentPane().add(btn, BorderLayout.SOUTH);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.pack();
            f.setLocationRelativeTo(null);
            f.show();
        }
    }