JavaFX之Task的使用
来源:互联网 发布:域名多少钱 编辑:程序博客网 时间:2024/05/14 07:16
任何做过GUI开发的人都会碰到在非UI线程中进行UI上的更新操作出现的问题。
在Android开发中,可以通过AsyncTask进行线程上的操作和UI的更新,不过通常AsyncTask的终止和再启动有问
题,我们通常使用Thread和Handler来自己实现相关的功能。
而在Swing开发中,我们可以使用SwingUtilities.invokeLater和SwingUtilities.invokeAndWait来做处理,也可以
使用SwingWorker来进行线程上的操作和UI更新。
这个SwingWorker和Android中的AsyncTask也类似,实现了相同的功能。
在JavaFX中,为了解决这样的问题,提供了Task<T>和Service<T>,不过使用Thread包装Task进行启动和使用Service与Task启动没有什么太大的区别。不过Service提供了restart等方法,这样可以很方便的进行refresh等操作。
示例地址:http://www.wingmei.net/examples/exp2/
public class taskexample extends Application { public void init(Stage primaryStage){ Region veil = new Region(); veil.setStyle("-fx-background-color: rgba(0, 0, 0, 0.4)"); HBox mHbox = new HBox(10); ProgressIndicator mBar = new ProgressIndicator(0); mBar.setMaxSize(150, 150); Label mLabel = new Label("Loading...0%"); mLabel.setFont(new Font(10)); mHbox.getChildren().add(mBar); mHbox.getChildren().add(mLabel); Task<Void> progressTask = new Task<Void>(){ @Override protected void succeeded() { super.succeeded(); updateMessage("Succeeded"); } @Override protected void cancelled() { super.cancelled(); updateMessage("Cancelled"); } @Override protected void failed() { super.failed(); updateMessage("Failed"); } @Override protected Void call() throws Exception { for(int i = 0; i < 100; i++){ Thread.sleep(50); updateProgress(i + 1, 100); updateMessage("Loading..." + (i + 1) + "%"); } updateMessage("Finish"); return null; } }; StackPane root = new StackPane(); root.getChildren().addAll(veil, mBar, mLabel); Scene scene = new Scene(root, 300, 250); veil.visibleProperty().bind(progressTask.runningProperty()); mBar.progressProperty().bind(progressTask.progressProperty()); mLabel.textProperty().bind(progressTask.messageProperty()); primaryStage.setTitle("The lesson of Task"); primaryStage.setScene(scene); new Thread(progressTask).start(); } @Override public void start(Stage primaryStage) { init(primaryStage); primaryStage.show(); } public static void main(String[] args) { launch(args); }}
上面是Task的使用示例。
Region只是一个灰度蒙版,visible属性与Task的running属性绑定,Task执行结束的时候,蒙版Region也消失。
通过创建一个Task,然后在Task的call方法中进行耗时操作的处理。我们可以通过updateProgress和updateMessage进行更新progress和message属性。
进行UI更新的最简单的方式就是将UI控件的属性与Task的各种属性进行绑定,这样在Task进行任务的时候可以同步更新UI。
当然,我们也可以自行的覆盖updateProgress和updateMessage等方法,进行自定义的操作。这样就和使用android中的AsyncTask是一样的。
另外,JavaFX中提供了一个将JavaFX打包为本地安装文件的工具(支持Windows,Linux和Mac),我自己也使用过,有时间再写写相关的情况。
转载请注明出处:http://blog.csdn.net/ml3947
-------------------------------------------------------------------------------------------------
好久没有写博客了,可能是工作上和感情上的一些问题,从9月份开始后的几个月都没怎么动博客。
最近一切都走上正轨,所以又开始写写博客。
希望大家工作顺利。
- JavaFX之Task的使用
- JavaFX之Task的使用
- JavaFX中javafx.concurrent.Task类的使用
- JavaFX之Pagination的使用
- JavaFX之TableView的使用
- JavaFX之ListView的使用
- JavaFX之ListView的使用
- Task javafx
- JavaFX的:入门使用JavaFX
- JavaFX的ResourceBundle使用
- javaFX 的入门使用
- JavaFX之对话框的创建
- JavaFX之对话框的创建
- javafx之TableView的FXCSS
- javafx之TableView的TableColumn
- javafx之TableView的TaleCell
- JavaFX之TableView的TableRow
- JavaFX之TableView的MenuButton
- 个性化Dialog小图标
- Windows如何在cmd命令行中查看、修改、删除与添加、设置环境变量
- play video in Qt using GStreamer xvimagesink
- java定时任务,每天定时执行任务(JDK TimerTask)
- 养成书写规范的DIV标签
- JavaFX之Task的使用
- linux软件安装方法
- Uva - 11300 - Spreading the Wealth
- phonegap控件自动适应屏幕大小
- SQL Server分页3种方案比拼
- 设计模式之Bridge模式学习
- 静态代码块详解
- 记录最近生活吧
- 网页消重算法(via北大天网课题组)