2016-02-19 9 views
1

Как исправить этот код с помощью многопоточности? Он работает, но мне нужно знать, как добавить поток к этому коду, я думаю, что именно поэтому индикатор прогресса не обновляется постепенно!ProgressBar в Javafx показывает только состояние 0 и 100% при копировании файла

public void copyfile(ActionEvent event){ 

     try { 

        File fileIn = new File(filepath); 
        long length = fileIn.length(); 
        long counter = 0; 
        double r; 
        double res=(counter/length); 

        filename=fieldname.getText(); 

        FileInputStream from=new FileInputStream(filepath); 
        FileOutputStream to=new FileOutputStream("C:\\xampp\\htdocs\\videos\\"+filename+".mp4"); 
        byte [] buffer = new byte[4096]; 
        int bytesRead=0; 

        while((r=bytesRead=from.read(buffer))!= 1){ 

        progressbar.setProgress(counter/length); 
          counter += r*100; 

        to.write(buffer, 0, bytesRead); 

        System.out.println("File is loading!!"+(counter/length)); 

     } 

     from.close(); 
     to.close(); 
    } catch (Exception e) { 
     progress.setText("upload is finished!!"); 
     } 


    } 

Можете ли вы отправить любое решение, которое мне помогает?

Спасибо за все советы.

ответ

1

Существует пример привязки индикатора выполнения с выполнением параллельной задачи в Oracle's JavaFX 8 concurrency documentation.

import javafx.concurrent.Task; 

Task task = new Task<Void>() { 
    @Override public Void call() { 
     static final int max = 1000000; 
     for (int i=1; i<=max; i++) { 
      if (isCancelled()) { 
       break; 
      } 
      updateProgress(i, max); 
     } 
     return null; 
    } 
}; 
ProgressBar bar = new ProgressBar(); 
bar.progressProperty().bind(task.progressProperty()); 
new Thread(task).start(); 

 Смежные вопросы

  • Нет связанных вопросов^_^