Java 如何使用JProgressBar?
我需要从文本文件中加载一堆单词(大约70000个),将其添加到哈希表(使用soundex作为键)并对值进行排序。在执行所有这些操作时,我想使用JProgressBar显示一个进度条。像和这样的文章只给出了一个非真实的例子(while循环)。谁能建议我该怎么做。如何从上述条件中获取一个数字来设置进度条的值?此外,似乎有不同的方法可以做到这一点-使用线程、计时器等。对于上述情况,哪种方法可能是最好的?我将在专用工作线程上循环读取文本文件,而不是事件调度线程(EDT)。如果我知道要读取的总字数,那么我可以计算循环每次迭代完成的百分比,并相应地更新进度条 示例代码 以下代码在预处理和后处理期间将进度条置于不确定模式,显示一个指示正在进行工作的动画。迭代读取输入文件时使用确定模式Java 如何使用JProgressBar?,java,swing,Java,Swing,我需要从文本文件中加载一堆单词(大约70000个),将其添加到哈希表(使用soundex作为键)并对值进行排序。在执行所有这些操作时,我想使用JProgressBar显示一个进度条。像和这样的文章只给出了一个非真实的例子(while循环)。谁能建议我该怎么做。如何从上述条件中获取一个数字来设置进度条的值?此外,似乎有不同的方法可以做到这一点-使用线程、计时器等。对于上述情况,哪种方法可能是最好的?我将在专用工作线程上循环读取文本文件,而不是事件调度线程(EDT)。如果我知道要读取的总字数,那么我
// INITIALIZATION ON EDT
// JProgressBar progress = new JProgressBar();
// progress.setStringPainted(true);
// PREPROCESSING
// update progress bar (indeterminate mode)
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
progress.setIndeterminate(true);
progress.setString("Preprocessing...");
}
});
// perform preprocessing (open input file, determine total number of words, etc)
// PROCESSING
// update progress bar (switch to determinate mode)
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
progress.setIndeterminate(false);
}
});
int count = 0;
while (true)
{
// read a word from the input file; exit loop if EOF
// compute soundex representation
// add entry to map (hash table)
// compute percentage completed
count++;
final int percent = count * 100 / total;
// update progress bar on the EDT
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
progress.setString("Processing " + percent + "%");
progress.setValue(percent);
}
});
}
// POSTPROCESSING
// update progress bar (switch to indeterminate mode)
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
progress.setIndeterminate(true);
progress.setString("Postprocessing...");
}
});
// perform postprocessing (close input file, etc)
// DONE!
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
progress.setIndeterminate(false);
progress.setString("Done!");
progress.setValue(100);
}
});
建议
- 考虑编写一个方便的方法来更新EDT上的进度条,以减少代码中的混乱(
)SwingUtilities.invokeLater…public void run()…