使用方法javafx绑定进度条

时间:2017-12-29 07:39:04

标签: javafx

我有一种方法可以执行一些任务(阅读,编写文件和其他任务)近3分钟。

我想绑定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());

1 个答案:

答案 0 :(得分:0)

要使用进度条绑定您的方法,您应该执行以下步骤:

  1. 创建包含方法的任务。
  2. 创建一个运行此任务的线程。
  3. 使用您的任务属性绑定您的progress属性。 我做了这个简单的例子,只需用你的方法代码改变我的代码:

    Matrix2D
  4. 开始运作:

    enter image description here

    操作完成:

    enter image description here

    PS:我使用 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(); } } ,因为我的文件很小。如果进度时间很长,可以将其删除。