2017-12-29 8 views
-1

私は、ほぼ3分間何らかのタスク(読み込み、ファイルやその他のタスクの作成も)を実行するメソッドを持っています。メソッド付きのバインディングプログレスバー、javafx

メソッドの進捗状況に応じて実行できるjavafxのプログレスバーをバインドしたいと思います。

これは、あなたがこれらの手順を実行する必要がありプログレスバーを使用してメソッドをバインドするために私の方法

System.out.println("Going to load contract/security:"+new Date()); 
    Map<Integer,FeedRefData> map = loadContractAndSecurityFromFile(loadFO); 
    addIndicesRefData(map); 
    BufferedWriter writer = createFile(); 
    for (FeedRefData feedRefData : map.values()) { 
     try { 
      updateInstrumentAlias(map, feedRefData); 
      String refDataString = feedRefData.toString(); 
      writer.write(refDataString, 0, refDataString.length()); 
      writer.newLine(); 
      writer.flush(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      log.info("Unable to write Quote Object to : "); 
     } 
    } 
    System.out.println("Ref Data File Generated:"+new Date()); 
+0

あなたの方法の完全なコードですか? –

+0

はいそれは完了です。 –

答えて

0

です:

  1. あなたの方法を含むタスクを作成します。
  2. このタスクを実行するスレッドを作成します。
  3. タスクプロパティで進行状況プロパティをバインドします。 私はこの単純な例を作った、ちょうどあなたのメソッドのコードと私のコードを変更:

    public class Bind extends Application { 
    
        public static void main(String[] args) { 
         launch(args); 
        } 
    
        @Override 
        public void start(Stage primaryStage) { 
    
         ProgressBar pb = new ProgressBar(); 
         pb.setProgress(1.0); 
    
         Button button = new Button("start"); 
         button.setOnAction((ActionEvent event) -> { 
          /*Create a task which contain method code*/ 
          Task<Void> task = new Task<Void>() { 
           @Override 
           protected Void call() throws Exception { 
    
            File file = new File("C:\\Users\\Electron\\Desktop\\387303_254196324635587_907962025_n.jpg"); 
            ByteArrayOutputStream bos = null; 
            try { 
             FileInputStream fis = new FileInputStream(file); 
             byte[] buffer = new byte[1024]; 
             bos = new ByteArrayOutputStream(); 
             for (int len; (len = fis.read(buffer)) != -1;) { 
              bos.write(buffer, 0, len); 
    
              updateProgress(len, file.length()); 
              /* I sleeped operation because reading operation is quiqly*/ 
              Thread.sleep(1000); 
             } 
             System.out.println("Reading is finished"); 
            } catch (FileNotFoundException e) { 
             System.err.println(e.getMessage()); 
            } catch (IOException e2) { 
             System.err.println(e2.getMessage()); 
            } 
            return null; 
           } 
          }; 
    
           Thread thread = new Thread(task); 
           thread.start(); 
          /*bind the progress with task*/ 
           pb.progressProperty() 
            .bind(task.progressProperty()); 
    
         }); 
         HBox box = new HBox(pb, button); 
         Stage stage = new Stage(); 
         StackPane root = new StackPane(); 
         root.getChildren().add(box); 
         Scene scene = new Scene(root); 
         stage.setScene(scene); 
         stage.show(); 
    
        } 
    
    } 
    

操作が開始しました:

enter image description here

動作を終了:

enter image description here

をPS:私私のファイルは非常に小さいので、Thread.sleep(1000)を使用しました。あなたの進行時間が長い場合は削除できます。

+0

ありがとう、それは働いた:) –

関連する問題