1、内部维护一个Task
2、其他与Task使用方法类似
package application.task.service;
import java.security.KeyStore.Entry;
import javax.annotation.processing.Processor;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class BasicService extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
HBox hBox = new HBox();
hBox.setPrefSize(500, 500);
Button button = new Button("START");
button.setOnAction((e)->{
System.out.println(Entry.Attribute.class.getCanonicalName());
});
ProgressBar bar = new ProgressBar();
bar.setPrefWidth(300.0);
bar.setProgress(0.0);
Button button1 = new Button("CANCLE");
MyService mService = new MyService(); // 定义对象
//监听属性,用于更新UI
mService.progressProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
//更新操作
button.setText(newValue.toString());
bar.setProgress((double) newValue);
}
});
button.setOnAction((e)->{
mService.start(); // 启动service,执行操作
System.out.println(Entry.Attribute.class.getCanonicalName());
});
Label label = new Label("0");
hBox.getChildren().addAll(button,button1,bar,label);
Scene scene = new Scene(hBox);
primaryStage.setScene(scene);
primaryStage.show();
}
//继承Service ,内部维护一个Task
public class MyService extends Service<Number>{
@Override
protected Task<Number> createTask() {
// 定义task对象
Task<Number> task = new Task<Number>() {
@Override
protected Number call() throws Exception {
int x = 0;
double progress = 0.00;
for (int i = 0; i < 100; i++) {
this.updateProgress(i, 100);
x++;
progress = x / 100.00;
System.out.println(progress);
Thread.sleep(100);
if(progress>0.8) {
this.updateMessage("will be finish 80%");
}
}
System.out.println("over111");
return (Number) new Double(progress);
}
};
return task;
}
}
}