【问题标题】:Jprogressbar not workingJprogressbar 不工作
【发布时间】:2014-01-06 04:39:32
【问题描述】:

我正在尝试通过网络上传一些文件。上传时将花费不确定的时间。所以希望在上传过程中显示一个不确定的 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(不确定)。我想知道是否有更简单和更容易的方法来做到这一点。

【问题讨论】:

  • 您是否尝试过 How to Use Progress Bars 上的 Swing 教程中的示例?
  • @camickr 几乎所有人。现在当我搜索 jprogressbar 问题时,谷歌返回的所有网站都显示为访问过的链接。
  • 这不能回答我的问题。 Swing 教程有一个工作示例。为什么您认为我们在此处发布的任何示例都与教程中的示例有所不同?您还没有就您在教程中感到困惑的代码提出具体问题。

标签: java multithreading jprogressbar


【解决方案1】:

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

此外,这看起来是使用SwingWorker 的好案例,它将在不同的线程上执行工作,然后以进度回拨您。好消息是这些回调已经发生在 Swing 线程上。

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

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

【讨论】:

  • SwingWorker 是您派我进入的一个新的好方向。谢谢
【解决方案2】:

你必须使用 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();
           }

       }
   }

}

祝你好运

【讨论】:

  • 我正在研究一个不确定的 jprogressbar。我们真的需要为此设定价值吗?
  • 您的进度条不是不确定的。看看你的代码:progBar.setIndeterminate(false);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多