Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在不知道确切执行时间的情况下使用进度条_Java_Swing_Progress Bar - Fatal编程技术网

Java:在不知道确切执行时间的情况下使用进度条

Java:在不知道确切执行时间的情况下使用进度条,java,swing,progress-bar,Java,Swing,Progress Bar,我已经读了一段时间关于进度条的书,但是我仍然找不到我问题的答案。也许这是我没有意识到的事情 我有一个用java编写的程序,我还使用 static long startTime = System.currentTimeMillis(); ... long endTime = System.currentTimeMillis(); long totalTime = endTime - startTime; System.out.println(totalTime); 我想知道,是否有可能创建

我已经读了一段时间关于进度条的书,但是我仍然找不到我问题的答案。也许这是我没有意识到的事情

我有一个用java编写的程序,我还使用

static long startTime = System.currentTimeMillis();
...
long endTime   = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime);
我想知道,是否有可能创建一个进度条,以及程序完成的百分比。我真的很困惑,因为我不知道我是否能计算出执行前所需的时间

我将感谢任何帮助。
关于

< P>进度PAR没有显示经过的时间百分比,而是工作的百分比。


因此,如果您的代码需要处理470个对象(=最大值)。每次处理对象时,增量<代码>进程<代码> 1。

< P>进度PAR不显示经过的时间百分比,但工作百分比。


因此,如果您的代码需要处理470个对象(=最大值)。每次处理一个对象时,将进程增加1。

很难估计程序完成所需的时间。但也许您应该专注于正在处理的数据集(正在复制的文件、正在处理的数据库行等),并对其进行度量?这是你可能知道的,并且可以从中计算出完成百分比。如果您确实没有有限的数据集,那么您可能应该显示一个不确定的进度条,而不是向用户显示一个没有提供任何有意义信息的进度条。

很难估计程序完成所需的时间。但也许您应该专注于正在处理的数据集(正在复制的文件、正在处理的数据库行等),并对其进行度量?这是你可能知道的,并且可以从中计算出完成百分比。如果您确实没有有限的数据集,那么您可能应该显示一个不确定的进度条,而不是向用户显示一个不提供任何有意义信息的进度条。

在这种情况下,您需要的是不确定的
ProgrssBar
。 以下是官方文件中的一段:

有时您无法立即确定长时间运行的任务的长度,或者该任务可能长时间停留在相同的完成状态。通过将进度条置于不确定模式,可以显示没有可测量进度的工作。处于不确定模式的进度条显示动画,以指示正在进行工作。一旦进度条可以显示更多有意义的信息,您应该将其切换回默认的确定模式。

下面是在不确定模式下使用
ProgressBar
的代码段

public void propertyChange(PropertyChangeEvent evt) {
if (!done) {
    int progress = task.getProgress();
    if (progress == 0) {
        progressBar.setIndeterminate(true);
        taskOutput.append("No progress yet\n");
    } else {
        progressBar.setIndeterminate(false); 
        progressBar.setString(null);
        progressBar.setValue(progress);
        taskOutput.append(String.format(
                "Completed %d%% of task.\n", progress));
    }
}
}

该代码段取自。

在本例中,您需要的是不确定的
ProgrssBar
。 以下是官方文件中的一段:

有时您无法立即确定长时间运行的任务的长度,或者该任务可能长时间停留在相同的完成状态。通过将进度条置于不确定模式,可以显示没有可测量进度的工作。处于不确定模式的进度条显示动画,以指示正在进行工作。一旦进度条可以显示更多有意义的信息,您应该将其切换回默认的确定模式。

下面是在不确定模式下使用
ProgressBar
的代码段

public void propertyChange(PropertyChangeEvent evt) {
if (!done) {
    int progress = task.getProgress();
    if (progress == 0) {
        progressBar.setIndeterminate(true);
        taskOutput.append("No progress yet\n");
    } else {
        progressBar.setIndeterminate(false); 
        progressBar.setString(null);
        progressBar.setValue(progress);
        taskOutput.append(String.format(
                "Completed %d%% of task.\n", progress));
    }
}
}

该片段取自。

您需要某种方法来测量任务的进度。您正在处理已知数量的数据吗?您应该能够计算您取得了多少进步,然后定期用新值更新进度条。例如,将进度条设置为0到100的范围

JProgressBar myProgressBar = new JProgressBar(0, 100);
在处理数据时(在新线程中),更新Swing线程中的进度条:

int[] myData = // data to process

for (int ctr = 0; ctr < myData.length; ctr++) {
    doMyProcess(myData[ctr]);
    int percentComplete = (int)Math.round(ctr / (float)myData.length);
    myProgressBar.setValue(percentComplete);
}

你需要一些方法来测量你任务的进度。您正在处理已知数量的数据吗?您应该能够计算您取得了多少进步,然后定期用新值更新进度条。例如,将进度条设置为0到100的范围

JProgressBar myProgressBar = new JProgressBar(0, 100);
在处理数据时(在新线程中),更新Swing线程中的进度条:

int[] myData = // data to process

for (int ctr = 0; ctr < myData.length; ctr++) {
    doMyProcess(myData[ctr]);
    int percentComplete = (int)Math.round(ctr / (float)myData.length);
    myProgressBar.setValue(percentComplete);
}

你在做什么过程?你的代码到底是做循环还是其他什么?@DimitraMicha这是一个特定于问题的问题,你还没有指定你的程序实际做什么。有些过程的剩余时间无法提前知道;还有其他地方可以估计。可能进度条不适合您的程序。我的程序使用数据库读取和转换某些数据。我希望在读取和转换数据时有一个进程条。但是,这就是问题所在,我只知道它被执行后的执行时间。你在做什么?你的代码到底是循环还是其他什么?@DimitraMicha这是一个特定于问题的问题,你没有指定你的程序实际做什么。有些过程的剩余时间无法提前知道;还有其他地方可以估计。可能进度条不适合您的程序。我的程序使用数据库读取和转换某些数据。我希望在读取和转换数据时有一个进程条。但是,这就是问题所在,我只知道它被执行后的执行时间。