Jprogressbar无法工作。

3

我正在尝试通过网络上传几个文件。在上传过程中,需要一段不确定的时间。因此,我希望在上传期间显示一个不确定的jprogressbar。然而,问题在于我的jprogressbar和上传无法同时工作。我尝试在单独的线程中进行上传,同时将jprogressbar保留在EDT中。我尝试了几种不同的方法,其中一些如下: 1)实现Runnable,在run()中上传文件。进度条一直在EDT中。(没有起作用。) 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(不确定状态)。我想知道是否有更简单、更易于操作的方法。


你尝试过Swing教程中关于“如何使用进度条”的示例吗? - camickr
@camickr 几乎所有的网站都是这样。现在当我搜索 jprogressbar 问题时,谷歌返回的所有网站都显示为已访问链接。 - antony.ouseph.k
那并没有回答我的问题。Swing教程有一个可行的例子。你认为我们在这里发布的任何示例都会与教程中找到的示例有什么不同吗?你还没有就教程中让你困惑的代码提出具体问题。 - camickr
2个回答

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();
           }

       }
   }

}

好运


我正在处理一个不定进度条(indeterminate jprogressbar)。我们真的需要为它设置值吗? - antony.ouseph.k
你的进度条不是不确定的。看看你的代码:progBar.setIndeterminate(false); - Markus

1
你没有在代码中任何时候设置进度条的值。
此外,这看起来是使用SwingWorker的好案例,它将在不同的线程上执行工作,然后通过进度回调进行调用。好处是这些回调已经发生在Swing线程上。
这个SwingWorker示例甚至包括设置进度条:

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


SwingWorker是您给我的一个新的好方向,谢谢。 - antony.ouseph.k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接