2017-11-21 3 views
1

NIO 라이브러리의 Files.copy를 사용하는 진행률 표시 줄을 업데이트하는 방법이 있는지 궁금해서 작업자 스레드에서 파일을 다운로드하는 데 사용됩니다. 아래 코드를 참조하십시오.nio 파일 추가 진행률 표시 줄

Task<Void> task = new Task<Void>() { 
     @Override 
     public Void call() { 

      Platform.runLater(new Runnable() { 
       @Override 
       public void run() { 
        try (InputStream in = download.openStream()){ 
         Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING); 
        }catch(Exception e){ 
         System.out.println("file download"); 
        } 
       } 
      }); 

      Platform.runLater(
        () -> view.enableButton() 
      ); 
      return null; 
     } 
    }; 

내가 작업에 바인딩을 시도한 진행 표시 줄이 있지만 버그를 유발하고 다운로드 버튼을 즉시 다시 활성화하는 것만 보입니다. 그것은 내가 현재 진행 상황을 얻을 것입니다 방법/files.copy하는 단 하나의 호출 이래로

답변

0

진행을

을 업데이트 call() 방법 내부 사용 updateProgress(current_progress, max); 또한 제대로

ProgressBar bar = new ProgressBar(); 
bar.progressProperty().bind(task.progressProperty()); 
new Thread(task).start(); 
+0

을 ProgressBar를 위해 Task 바인딩 ? 진행률 표시 줄이있는 루프를 사용하여 파일을 다운로드하는 다른 방법을 보았습니다. 그러나이 솔루션은 다운로드 진행률을 보여주고 싶지 않은 경우 가장 단순 해 보였습니다. 그 이유는 내가 놓친 것 . – msd94

+0

@ msd94 진행하기 위해서는'Files.copy'를 한 번 호출하는 대신'FileInputStream.read()'와'FileOutputStream.write()'를 사용해야 할 수도 있습니다. – aKilleR