gpt4 book ai didi

JavaFX 扩展服务 <> 返回值

转载 作者:行者123 更新时间:2023-12-02 17:06:20 24 4
gpt4 key购买 nike

我的应用程序中有任务,但我不知道如何从该任务返回。

public class TimeManager extends Service<String> {
@Override
protected Task<String> createTask() {
return new Task<String>() {
@Override
protected String call() throws Exception {
String txt = null;
while (!isCancelled()) {
try {
txt = "some txt";
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
return txt;
}
};
}

在主类中:

TimeManager time = new TimeManager();
time.start();
time.getValue();

时间总是返回空值。我必须做什么才能返回值?线程运行良好,我可以将数据从线程发送到应用程序

最佳答案

您的任务不会发布中间更新。此外,Service 用于在后台线程中运行任务,以避免阻塞 JavaFX 应用程序线程。因此,如果您在启动服务后直接访问它,则该值可能不会被分配。最好对 value 属性使用绑定(bind)或监听器,以便在分配数据时检索数据。

public class TimeManager extends Service<String> {

@Override
protected Task<String> createTask() {
return new Task<String>() {

int i = 0;

@Override
protected String call() throws Exception {
String txt = null;
while (!isCancelled()) {
txt = Integer.toString(++i);
updateValue(txt); // publish new value
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
return txt;
}
};
}
}
TimeManager time = new TimeManager();
label.textProperty().bind(time.valueProperty());
time.start();

请注意,在这种情况下可能不需要服务,因为您只运行一个任务。使用 new Thread(task).start() 运行 Task 实例实际上可能就足够了。

此外,还有更好的选项来安排 GUI 的快速重复更新,请参阅 JavaFX periodic background task

关于JavaFX 扩展服务 <> 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51608603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com