我需要從文本文件中加載一堆單詞(大約70,000),將它添加到散列表(使用soundex作爲鍵)並對值進行排序。在做所有這些時,我想使用JProgressBar顯示進度條。諸如this和this之類的文章僅給出了一個非實例(一個while循環)。任何人都可以建議我該怎麼做。如何從上述條件獲取數字以設置進度條的值?也似乎有不同的方式來做到這一點 - 使用線程,計時器等。這可能是最好的方法,如上述情況?如何使用JProgressBar?
7
A
回答
7
我會在專用工作線程中的循環中讀取文本文件,而不是事件分派線程(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()...
)
+0
優秀的工作扎克!但我想知道它是否會讓我的編程方式變得太慢。似乎我必須處理輸入文件兩次 - 以確定否。的文字和另一次處理每個單詞。你有什麼建議嗎?像舉行一個數組或類似的東西 – javac 2008-11-10 05:27:59
1
使用SwingWorker的混亂: http://java.sun.com/docs/books/tutorial/uiswing/concurrency/interim.html
0
獲取文件大小並計算字節數在每次迭代中都進行了處理。這樣,您不必循環兩次文件。
相關問題
- 1. 如何使用JProgressBar
- 2. 如何使用NetBeans的JProgressBar?
- 3. Java - 如何在SwingWorker中使用JProgressBar
- 4. 在SaxParser中使用jProgressBar
- 5. 使用JProgressBar運行JFrame
- 6. 如何逐步更新JProgressBar?
- 7. 如何更改JProgressBar顏色?
- 8. 如何使用JProgressBar顯示我的應用程序延遲?
- 9. 的JDialog用的JProgressBar
- 10. 如何使用FileChannels transferFrom()方法監視進度(JProgressBar)?
- 11. 如何測量任務進度並使用JProgressBar更新它
- 12. 如何在不使用JProgressBar的情況下製作進度條?
- 13. 如何顯示JProgressBar中的CPU和磁盤使用情況?
- 14. 如何在SftpProgressMonitor實例中使用現有的JProgressBar?
- 15. ExecutorService JProgressBar
- 16. 在Swing中使用JProgressBar操作
- 17. 在循環內使用jProgressBar的Java
- 18. 下載期間使用swingworker更新JProgressBar
- 19. Java ProgressMonitorInputStream使用現有的JProgressBar
- 20. 試圖使用JProgressBar的線程
- 21. 如何停止父級上的JProgressBar?
- 22. 如何更改JProgressBar文本顏色
- 23. 如何重置java中的JProgressBar?
- 24. Java - 如何從Socket更新JProgressBar?
- 25. jprogressbar在鞦韆
- 26. 更新的JProgressBar
- 27. JProgressBar查詢
- 28. JProgressBar實現
- 29. JProgressBar更新
- 30. JProgressBar不更新
看看這個[JProgressbar的簡單例子](http://tutorialdata.com/example/swing/JProgressBarExample.html) – 2012-05-11 14:54:42