我使用的是背景
Thread
运行我的加载代码并希望绑定
MessageProperty
的
Task
标签。
但是,打电话时
updateMessage()
任务挂起;消息永远不会更新,下一行代码也不会执行。
这是使用JDK 1.10.1。这是一个mcve:
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
VBox root = new VBox(10);
Label label = new Label("Message");
root.getChildren().add(label);
primaryStage.setScene(new Scene(root));
Task loadingTask = new LoadingTask();
Thread loadingThread = new Thread(loadingTask);
loadingThread.setDaemon(true);
label.textProperty().bind(loadingTask.messageProperty());
loadingThread.start();
primaryStage.setWidth(200);
primaryStage.setHeight(200);
primaryStage.show();
}
}
class LoadingTask<Void> extends Task {
@Override
protected Object call() throws Exception {
System.out.println("Loading task ...");
updateMessage("Loading task ...");
System.out.println("Message: " + getMessage());
return null;
}
}
输出:
Loading task ...
第二个
System.out.println()
从未执行。
编辑:
我在我的mcve中添加了一个简单的GUI,并将标签绑定到
消息属性
. 标签
做
更新以显示“加载任务…”,但控制台输出保持不变;代码位于
更新消息()
调用的方法不执行。
第二次编辑:
我运行了我的步骤调试程序,
IllegalStateException
正在从
任务
类:“只能从fx应用程序线程使用任务”