2016-05-30 88 views
0

我正在製作一個程序來修補一些文件,我想用ProgressBar作爲進度指示器,但是進度條保持完整狀態,並且在完成後不會重置。 這是更新它的方法。JavaFX ProgressBar Wont Reset

for(int i = 0; i < paths.getItemCount(); i++) 
{  
    current_progress += 0.02; 
    System.out.println("verifiing: " +paths.getItems()[i]); 
    File bugger = new File(paths.getItems()[i]); 

    File dst = new File(starmade_path + "\\data\\image-resource\\ " + names.getItems()[i]); 
    Files.copy(bugger.toPath(), dst.toPath(), REPLACE_EXISTING, COPY_ATTRIBUTES, NOFOLLOW_LINKS); 
    ProgressBar.setProgress(current_progress); 
} 

我已經嘗試過這個

for(int i = 0; i < paths.getItemCount(); i++) 
{   
    current_progress += 0.02; 
    System.out.println("verifiing: " +paths.getItems()[i]); 
    File bugger = new File(paths.getItems()[i]); 

    File dst = new File(starmade_path + "\\data\\image-resource\\ " + names.getItems()[i]); 
    Files.copy(bugger.toPath(), dst.toPath(), REPLACE_EXISTING, COPY_ATTRIBUTES, NOFOLLOW_LINKS); 
    ProgressBar.setProgress(current_progress); 
} 

ProgressBar.setProgress(0); 

但是,當我用這個也不會顯示任何進展可言。 Thread.sleep()也不會這樣做。

+1

您應發佈完整的代碼以使我們能夠來檢測問題出在哪裏。 – DVarga

+0

最可能的原因是您沒有正確使用多線程,但除非您的問題包含[MCVE],否則沒有人可以真正知道。 –

回答

0
  1. 不要寫這樣的'ProgressBar.setProgress'代碼,這個語法應該保留給使用該類的靜態調用。

讓你的對象,如

ProgressBar progressBar = new ProgressBar(); 

@FXML 
ProgressBar progressBar; 

2. 這個循環工作

float current_progress = 0f;  
for(int i = 0; i < 10; i++) { 
      current_progress += 0.02; 
      progressBar.setProgress(current_progress); 
     } 

和進度條發展到寬度的20%,所以你的代碼在語法上是正確的,可能是這樣sue是paths.getItemCount()的最大值太小而無法看到一些有意義的進度,請檢查輸出是否爲「verifiing:」+ paths.getItems()[i]

+0

是的,它看起來很快,有沒有辦法讓這個方法變慢? – Agronaut022

+0

請參閱此鏈接中的路徑轉換https://examples.javacodegeeks.com/desktop-java/javafx/javafx-animation-example/ –