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

最佳答案

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

此外,这似乎是使用SwingWorker的一个好例子,它将在不同的线程上执行工作,然后在取得进展时回叫您。好消息是这些回调已经在Swing线程上发生了。

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

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

关于java - Jprogressbar不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20650738/

10-10 01:50