如何更新进度条以显示活动期间的进度(一种方法有效时)?

汉斯·福

我搜索了这个问题,发现了一些文档,但是它们对我来说太复杂了。

我只想简单地使进度条在活动期间起作用,而不是在那之后。

在我提供的示例代码中,进度条在运行方法完成后才起作用,而不是在此期间起作用。当运行方法运行时,如何更改此代码以更新正在更新的进度条?

我想我必须创建一个新线程来处理长时间运行的方法,但是我不知道该怎么做?

public class Gui extends JFrame {

private JProgressBar progressBar;
private JButton button;

public Gui() throws HeadlessException {
    super("Progress bar");
    setSize(500, 100);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());
    add(resPan());
}

private JPanel resPan() {
    JPanel resPan = new JPanel(new FlowLayout(FlowLayout.CENTER));
    resPan.setPreferredSize(new Dimension(500, 100));

    progressBar = new JProgressBar();
    progressBar.setPreferredSize(new Dimension(180, 40));

    button = new JButton("Action");
    button.setPreferredSize(new Dimension(80, 40));
    button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent arg0) {
            progressBar.setIndeterminate(true);
            run();
        }

    });

    resPan.add(button);
    resPan.add(progressBar);
    return resPan;
}

private void run() {
    try {
        Thread.sleep(4000);
        //progressBar.setIndeterminate(false);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}}
大提琴

是的,您必须创建一个新线程。否则,Swing无法显示任何新内容(例如,更新进度条),因为Swing的线程仍在忙于您的run方法。一种简单的方法是:

public void actionPerformed(ActionEvent arg0) {
     progressBar.setIndeterminate(true);
     new Thread(new Runnable() {
         @Override
         public void run() {
             // do the long-running work here
             // at the end:
             SwingUtilities.invokeLater(new Runnable() {
                 @Override
                 public void run() {
                     progressBar.setIndeterminate(false);
                 }
             );
         }
     ).start();
}

请注意,必须将progressBar声明为final,以便在线程的可运行内部使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何循环更新进度条?

来自分类Dev

如何从同时运行的任务更新进度条

来自分类Dev

动态更新进度条yiiframework

来自分类Dev

使用 javascript 更新进度条

来自分类Dev

如何在QT中更新进度条时更改选项卡

来自分类Dev

进度条使用样式更新进度

来自分类Dev

显示活动时显示进度条(循环)

来自分类Dev

刷新进度条

来自分类Dev

有没有一种“流畅”的方式来编写进度条?

来自分类Dev

如何显示进度条

来自分类Dev

Bootstrap进度条,渐变颜色按比例显示在有效宽度上

来自分类Dev

在UIActivityItemProvider活动期间显示进度指示器

来自分类Dev

从文件读取输入时创建进度条的最有效方法

来自分类Dev

加载活动时的进度条

来自分类Dev

用jQuery更新进度条大小

来自分类Dev

使用ajax请求秒更新进度条

来自分类Dev

Angular同步http循环更新进度条

来自分类Dev

通过C函数更新进度条

来自分类Dev

vb.net更新进度条多线程

来自分类Dev

在WPF中实时更新进度条

来自分类Dev

使用Firebase上传更新进度条

来自分类Dev

后台更新进度条的特定用例

来自分类Dev

使用TPL异步更新进度条

来自分类Dev

使用复选框更新进度条:jQuery

来自分类Dev

vb.net更新进度条多线程

来自分类Dev

使用Firebase上传更新进度条

来自分类Dev

QWidget :: repaint:更新进度条时检测到递归重画

来自分类Dev

为什么更新进度条时浏览器会挂起?

来自分类Dev

创建带有更新进度条的ListView以下载Windows 8 C#XAML