- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在对此进行一些研究,但至少可以说我仍然很困惑。
谁能给我一个具体的例子,说明何时使用 Task
以及何时使用 Platform.runLater(Runnable);
?究竟有什么区别?何时使用其中任何一个是否有黄金法则?
如果我错了也请纠正我,但这两个“对象”不是在 GUI 的主线程内创建另一个线程的一种方式(用于更新 GUI)吗?
最佳答案
Platform.runLater(...)
用于快速简单的操作,Task
用于复杂和大型操作。
示例:为什么我们不能使用 Platform.runLater(...)
进行长计算(取自以下引用)。
问题:后台线程仅从 0 计数到 100 万并更新 UI 中的进度条。
使用 Platform.runLater(...)
的代码:
final ProgressBar bar = new ProgressBar();
new Thread(new Runnable() {
@Override public void run() {
for (int i = 1; i <= 1000000; i++) {
final int counter = i;
Platform.runLater(new Runnable() {
@Override public void run() {
bar.setProgress(counter / 1000000.0);
}
});
}
}).start();
This is a hideous hunk of code, a crime against nature (and programming in general). First, you’ll lose brain cells just looking at this double nesting of Runnables. Second, it is going to swamp the event queue with little Runnables — a million of them in fact. Clearly, we needed some API to make it easier to write background workers which then communicate back with the UI.
使用任务的代码:
Task task = new Task<Void>() {
@Override public Void call() {
static final int max = 1000000;
for (int i = 1; i <= max; i++) {
updateProgress(i, max);
}
return null;
}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
it suffers from none of the flaws exhibited in the previous code
关于java - JavaFX 中的 Platform.runLater 和 Task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784333/
我有一个连接到套接字连接的应用程序,并且该连接向我发送了很多信息..可以说每秒 300 个订单(也许更多)..我有一个类(它就像一个监听器,对某个事件(并且该事件具有顺序)接收该顺序。创建一个对象,然
我想实现 Platform.runLater() 的功能,但在当前线程上,该程序与 JavaFX 无关,它是一个 Tomcat 服务器。 我尝试执行 Platform.runLater(this::f
我正在用 JavaFX 编写一个简单的平台游戏。由于我必须使用 Platform.runLater() (用于添加/删除节点),我知道在具有大量对象的大型阶段的情况下可能存在性能问题 -> 更多 ru
我想更新我的 javafx UI,但我不想使用 Platform.RunLater,但是当我想更新我的 Pane 时: Pane.getChildren().add(listview); 我得到 ja
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我有一个表示类,存储 XYChart.Series 对象并通过观察模型来更新它。系列更新是通过使用 Platform.runLater(...) 完成的 我想对此进行单元测试,确保 runLater
我有一个表示类存储 XYChart.Series 对象并通过观察模型更新它。系列更新是通过使用 Platform.runLater(...) 我想对此进行单元测试,确保正确执行 runLater 中的
我有一个简单的应用程序,它在后台更新数据,在更新时,它会禁用所有其他按钮并启用 TextArea 来显示进度。 步骤: 禁用主界面中的所有其他按钮(按钮名称:plotButton) 启用显示更新已开始
我正在为一个项目使用 JavaFX。在启动期间,我有一个要求数据的提示,我的网络类使用这些数据建立到服务器的连接。我的网络类异步工作,我在回调中得到响应。根据响应,我想从我的回调中打开一个新窗口(阶段
我正在使用 Swing 中嵌入的 JavaFX 编写 Java Applet。用户可以使用 JFXPanel 使用以下代码启动带有 JavaFX 组件的 Swing-GUI: group = Acce
我基本上希望能够在我的 LWJGL/GLFW 线程启动后(和内部)启动一个新的 Javafx 窗口(阶段)。我基本上是这样做的: Thread thread = new Thread(()->Plat
我有一个JavaFX应用程序,该应用程序运行多个执行大量计算的线程。问题是,一段时间后UI完全冻结,但我仅使用Platform.runLater()更新了UI 我启动主线程的方式将生成其余线程: ma
我了解到在 JavaFX 中相当于 SwingUtilities.invokeLater(new Runnable() { public void run() { dosomething()
这个问题已经有答案了: JavaFx response to SwingUtilities.invokeLater (1 个回答) 已关闭 9 年前。 我有两个单独的代码,一个是: Platf
Button button = new Button("Show Text"); button.setOnAction(new EventHandler(){ @Override pu
当我关闭应用程序时,下面的代码没有正确退出。我相信问题是我在哪里准确调用 system.exit 和 platform.exit.... hour_Label.textProperty().bind(
我有一个 JavaFX 应用程序,它附加了几种方法,并且有一种方法类似于调用所有方法的所有方法喜欢 DFF Lookup Profile Everything Everything 调用所有这些方法
此代码示例是 Stopwatch 类的一部分,该类是一个更大项目的一部分,该项目旨在成为一个模仿 Android 时钟的桌面 GUI 应用程序。我有秒、分钟、小时等标签,这些标签应该从定时器任务内的无
我正在尝试使用来自另一个实现 Runnable 的类的 Platform.runLater 更新 TextArea。我的所有 GUI 都在一个类中(我的 TextArea 所在的位置),我正在创建一个
我有几个关于 Platform.runLater 的问题.我有一个 JavaFX 应用程序类。在这个类中,我运行一个线程(该线程从网络套接字读取数据)。 现在当我创建一个新的 Stage在线程内,系统
我是一名优秀的程序员,十分优秀!