ksa*_*nas 13 user-interface multithreading javafx task
使用JavaFX和Threads时遇到问题.基本上我有两个选择:使用Tasks或Platform.runLater.据我所知,Platform.runLater应该用于简单/简短的任务,以及Task较长的任务.但是,我不能使用它们中的任何一个.
当我打电话时Thread,它必须在任务中间弹出验证码对话框.在使用时Task,它忽略了我显示新对话框的请求......它不允许我创建一个新阶段.
另一方面,当我使用时Platform.runLater,它让我显示一个对话框,但是,程序的主窗口冻结,直到显示弹出对话框.
我需要任何解决方案.如果有人知道如何处理这个或有一些类似的经验,并找到了解决方案,我期待着您的回复!
Ant*_* J. 32
正如puce所说,你必须使用Task或Service用于你需要在后台做的事情.并Platform.runLater从后台线程在JavaFX Application线程中执行操作.
您必须同步它们,其中一种方法是使用该类CountDownLatch.
这是一个例子:
Service<Void> service = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
//Background work
final CountDownLatch latch = new CountDownLatch(1);
Platform.runLater(new Runnable() {
@Override
public void run() {
try{
//FX Stuff done here
}finally{
latch.countDown();
}
}
});
latch.await();
//Keep with the background work
return null;
}
};
}
};
service.start();
Run Code Online (Sandbox Code Playgroud)
如果要在后台执行某些操作,请使用JavaFX Application线程中的Worker(Task,Service).
http://docs.oracle.com/javafx/2/api/javafx/concurrent/package-summary.html
Platform.runLater如果要在JavaFX Application线程上执行某些操作,请从后台线程使用.