2016-05-30 27 views
0

私はいくつかのファイルにパッチを当てるプログラムを作っていて、進捗インジケータとしてProgressBarを使用したかったのですが、進行状況バーは完全にいっぱいのままであり、完了後にリセットされません。 これを更新する方法です。JavaFX ProgressBarがリセットされない

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'のようなコードを記述しないでください。この構文は、クラスを使用する静的呼び出し用に予約する必要があります。

このループは

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

を動作し、プログレスバーは幅の20%に進行し、

ProgressBar progressBar = new ProgressBar(); 

または

@FXML 
ProgressBar progressBar; 

2. のようなあなたのオブジェクトを作りますあなたのコードは構文的に正しいので、おそらくsueはpaths.getItemCount()の値が小さすぎて意味のある進捗状況を確認できませんでした。出力を「確認」してください:+ paths.getItems()[i]

+0

はい、それは急に速くなるようですが、この方法を遅くする方法はありますか? – Agronaut022

+0

このリンクのパス遷移を参照してください。https://examples.javacodegeeks.com/desktop-java/javafx/javafx-animation-example/ –

関連する問題