是否可以更改/设置 javafx.concurrent.Task 的名称或标题,就像在Thread thread.setName(" name")中一样?
答案 0 :(得分:3)
我猜你还没有理解javafx.concurrent.Task
Task
和Threads
相同, Runnable
和Thread
具有相同的差异。
您能为Runnable
对象命名吗?
仍然困惑?关于背景的解释..
来自文档
public abstract class Task<V>
extends java.util.concurrent.FutureTask<V>
implements Worker<V>, EventTarget
<强> FutureTask 强>
FutureTask可用于包装Callable或Runnable对象。 因为FutureTask实现了Runnable,所以可以提交FutureTask 执行人执行。
<强>任务强>
同样,由于Task从FutureTask扩展,因此非常简单 自然地使用带有java并发Executor API的Task。既然一个 任务是Runnable,你也可以直接调用它(通过调用 FutureTask.run()方法)来自另一个后台线程。这允许 对于工作的组合,或将其传递给构造的新线程和 手动执行。
基本上,您需要Thread
或Executor
来执行Task
,我希望您已经知道如何命名Thread
或Threads spawned from Executors
; )
如果没有..
答案 1 :(得分:3)
javafx.concurrent.Task
有一个title属性,您可以使用受保护的方法updateTitle(String newTitle)
在任务中更新。
回应Edv Beq的评论: 来自[docs | https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html#updateTitle-java.lang.String-]:
updateTitle protected void updateTitle(String title)
更新标题 属性。对updateTitle的调用将合并,并在FX上运行 应用程序线程,所以甚至从FX调用updateTitle 应用程序线程可能不一定会导致立即更新 此属性和中间标题值可以合并以保存 关于事件通知。
可以安全地从任何线程调用此方法。
我的预感是标题更新正在排队到jfx线程,但是你试图立即访问它,而不是得到你期望的结果。我知道这不是你要求的例子,但我希望它有所帮助。