javaFx 的task(javafx.async包下)是在fx中使用线程的一种机制。但是比较奇怪的是,它给了一个JavaTaskBase的类实现了Task,但是这个东西不能直接支持javaFx。比较郁闷。要想直接用javaFx来实现Task又比较麻烦。所以折中处理了一下。
首先定义一个java接口:
package test.task;
/**
*
* @author clark
*/
public interface MyTask {
public void execute();
}
然后定义java的对象:
package test.task;
import javafx.async.RunnableFuture;
/**
*
* @author clark
*/
public class JavaTask implements RunnableFuture {
private MyTask task;
public MyTask getTask() {
return task;
}
public void setTask(MyTask task) {
this.task = task;
}
@Override
public void run() throws Exception {
task.execute();
}
}
最后实现JavaTaskBase:
package test.task;
import javafx.async.JavaTaskBase;
import javafx.async.RunnableFuture;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.lang.UnsupportedOperationException;
/**
* @author clark
*/
public class Test extends JavaTaskBase {
override protected function create(): RunnableFuture {
var task = JavaTask {};
task.setTask(MyTask {
override public function execute(): Void {
while (true)
println("--{new Date()}--");
}
});
return task;
}
}
下面是调用部分:(片段)
Button {
text: "get history"
effect: shadow
action: function() {
test.task.Test {
onDone: function() {
println('--done--');
}
}.start()
}
}
这样就可以执行javaFX的Task任务了。但总是感觉怪怪的。有高手请指正。
来源:oschina
链接:https://my.oschina.net/u/55364/blog/8854