Java 如何在方法完成之前创建JProgressBar而不重置值

Java 如何在方法完成之前创建JProgressBar而不重置值,java,swing,jprogressbar,Java,Swing,Jprogressbar,主要的问题是,我不知道我的方法需要多长时间才能完成,我有两个线程,一个用于执行执行任务的方法,另一个用于执行进度条的进度,这是我的第一个线程: @Override public void run() { //This is a static variable, indicate when the method analyzeSentence finish finish = false; String sentence = analyzeSentence(); try

主要的问题是,我不知道我的方法需要多长时间才能完成,我有两个线程,一个用于执行执行任务的方法,另一个用于执行进度条的进度,这是我的第一个线程:

@Override
public void run() {

//This is a static variable, indicate when the method analyzeSentence finish
    finish = false; 

    String sentence = analyzeSentence();
    try {
        Thread.sleep( 1000 );
    } catch (InterruptedException e){
        System.err.println( e.getMessage() );
    }
    finish = true;
}
在我的第二个线程(进度条线程)中,我有:

@Override
public void run() {
    i = 1;
    while(!Analyze.finish) {
        i = (i > 100) ? 1 : i+1; //Here I have the problem

        progressBar.setValue(i);
        progressBar.repaint();
        try {
            Thread.sleep(this.value);
        } catch (InterruptedException e) {
            System.err.println(e.getMessage());
        }

        if(Analyze.finish) {
            progressBar.setValue(100);
            break;
        }
    }
}

问题是进度条将其值重置为零,但该方法仍然没有结束,因此进度条会一次又一次地填充。。。有没有办法获得该方法完成所需的时间长度?

1)GUI更新应该从事件调度线程完成。2) 为了更快地获得更好的帮助,可以发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。3) 请参阅..“有没有办法获得该方法完成所需的时间长度?”计算机程序不知道未来你需要把你的任务分成一些已知数量的部分。因为我们还不知道你在做什么,所以我们不能就如何做提供建议。@Bruno。。因为你不知道你的方法需要多长时间才能完成,如果你使用不确定的JProgressbar会更好…是的,我已经检查了这个方法,它工作得很好,并且有一些细节,比如@Radiodef说的关于拆分任务,我可以在进程的一部分结束时显示出来,看起来不错。谢谢大家的回答:)