Jprogressbar无法正常工作

时间:2013-12-18 06:02:38

标签: java multithreading jprogressbar

我正在尝试通过网络上传一些文件。上传时间不确定。所以希望在上传过程中显示不确定的jprogressbar。但问题是我的jprogressbar和上传不能同时工作。我在单独的线程中尝试上传,同时将jprogressbar保留在EDT中。我尝试了几种不同的方法。他们之中有一些是: 1)实现了Runnable并在run()中上传了该文件。进度条一直在美国东部时间。 (不工作。) 2)有两个独立的线程,并在每个线程中处理上传和进度条处理。 (不工作)。代码是:

Thread oThread = new Thread(new Runnable() {

   @Override
   public void run() 
   {
        progressBar.setIndeterminate(true);
        progressBar.setVisible(true);
        progressBar.validate();

   }
});

Thread oThread1 = new Thread(new Runnable() 
{

    @Override
    public void run() {
        logger.info("Upload result from ***: "+ newport.upload(textbyte, wavbyte,xmlbyte, filename));

        }
    });

3)然后我重写了整个事情并尝试使用Executor这样的不同方法:

executor.execute(new Runnable() {
    @Override
    public void run() {
            upload actions

            SwingUtilities.invokeLater(new Runnable() {
                 progBar.setVisible(false);
            });
    }});

但这些技术都没有奏效。我是新手,我想知道是否所有这一切都必须要显示jprogressbar(不确定)。我想知道是否有更简单,更容易的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

您必须使用setValue()来更改进度条 下面的代码示例,用于使用jporgressbar

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

public class Tets  {

    public static void main(String [] args) {
       JFrame frame =new JFrame();
       JPanel panel=new JPanel();

       JProgressBar bar=new JProgressBar();
       bar.setMaximum(100);
       bar.setMinimum(0);
       panel.add(bar);


       frame.getContentPane().add(panel);
       frame.pack();
       frame.setVisible(true);

       for(int i=0;i<100;i++){
           bar.setValue(i);
           try {
               Thread.sleep(100);
           } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }

       }
   }

}
祝你好运

答案 1 :(得分:1)

您实际上并未在发布的代码中的任何位置设置进度条的值。

此外,这似乎是使用SwingWorker的一个好例子,它将在不同的线程上执行工作,然后通过进度回调。这些回调的好处是已经在Swing线程上发生了。

SwingWorker示例甚至包括设置进度条:

http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html