多任务Service
创建MyTask继承Task类
public class MyTask extends Task<Number> { /** * 调用start方法时执行 * * @return * @throws Exception */ @Override protected Number call() throws Exception { this.updateTitle("拷贝文件"); FileInputStream fileInputStream = new FileInputStream(new File("E:\\Users\\86158\\图片\\110300202_waifu2x_1x_3n_jpg (2).png")); FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\Users\\86158\\图片\\测试复制.png")); double max = fileInputStream.available(); byte[] bytes = new byte[1024]; int len = 0; double sum = 0; double progress = 0; while ((len = fileInputStream.read(bytes, 0, bytes.length)) != -1) { if (isCancelled()) { break; } fileOutputStream.write(bytes, 0, len); sum += len; this.updateProgress(sum, max); progress = sum / max; if (progress < 0.5) { this.updateMessage("请耐心等待"); } else if (progress < 0.8) { this.updateMessage("马上就好"); } else if (progress < 1) { this.updateMessage("即将完成"); } else { this.updateMessage("拷贝完成"); } Thread.sleep(1); } fileInputStream.close(); fileOutputStream.close(); return 0; } }
创建MyService继承Service类返回MyTask
public class MyService extends Service<Number> { @Override protected Task<Number> createTask() { return new MyTask(); } @Override protected void executeTask(Task<Number> task) { super.executeTask(task); task.valueProperty().addListener((observable, oldValue, newValue) -> { System.out.println("executeTask:valueProperty"); }); } @Override protected void ready() { super.ready(); System.out.println("ready:"+ Platform.isFxApplicationThread()); } @Override protected void scheduled() { super.scheduled(); System.out.println("scheduled:"+ Platform.isFxApplicationThread()); } @Override protected void running() { super.running(); System.out.println("running:"+ Platform.isFxApplicationThread()); } @Override protected void succeeded() { super.succeeded(); System.out.println("succeeded:"+ Platform.isFxApplicationThread()); } @Override protected void cancelled() { super.cancelled(); System.out.println("cancelled:"+ Platform.isFxApplicationThread()); } @Override protected void failed() { super.failed(); System.out.println("failed:"+ Platform.isFxApplicationThread()); } }
创建MyService类
MyService myService = new MyService();
操作MyService
start.setOnAction(event -> { myService.start(); }); cancel.setOnAction(event -> { myService.cancel(); }); restart.setOnAction(event -> { myService.restart(); }); reset.setOnAction(event -> { myService.reset(); progressBar.setProgress(0); }); myService.progressProperty().addListener((observable, oldValue, newValue) -> { progressBar.setProgress(newValue.doubleValue()); }); myService.messageProperty().addListener(((observable, oldValue, newValue) -> { message.setText(newValue); }));