java - 等待 JavaFX 应用程序线程完成事件处理?

标签 java multithreading testing javafx concurrency

这里有很多问题都在询问如何为后台线程暂停 JavaFX 应用程序线程,但我想要相反的方法!

我正在尝试测试完全处理一系列关键输入需要多长时间。我正在使用 Automaton JavaFX 的测试库,editor.type(key) 生成一个由应用程序处理的按键事件。这是众多尝试之一:

long start = System.nanoTime();

editor.type(AGUtils.LEFT_ARROW);
editor.type(AGUtils.LEFT_ARROW);
editor.type(AGUtils.RIGHT_ARROW);
editor.type(AGUtils.RIGHT_ARROW);

FutureTask<Callable> t = new FutureTask<>(...);
Platform.runLater(t);

while (!t.isDone()) { } // wait for the FutureTask to be called

long end = System.nanoTime();

但是,似乎 FX 应用程序线程可能在处理其余按键事件之前处理 FutureTask。

TLDR:我想精确测量 JavaFX 应用程序线程何时完成处理我生成的四个按键事件。

我该怎么做?谢谢!

最佳答案

使用 ExecutorService 并等待线程完成。存储您启动服务的时间戳,然后比较这两个时间之间的差异以获得答案。

关于如何使用 ExecutorService 的简单示例:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
  taskExecutor.execute(new MyTask());
}
taskExecutor.shutdown();
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  ...
}

关于java - 等待 JavaFX 应用程序线程完成事件处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36821260/

相关文章:

java - 如何创建游戏!使用 JetBrains IntelliJ Idea 13 的框架 JAVA 应用程序?我只找到Scala项目

Java Atomicity & 一个好的比较和交换框架?

c# - SynchronizationContext 有什么作用?

javascript - 内部对象函数的 SinonJS calledOnce 或 callCount 问题

testing - 为什么我的 Ember 组件集成测试在单独运行时通过,但在运行完整套件时却失败了?

java - 获取两个单词之间的字符串

Javadoc 源代码标记

testing - 最后一分钟范围变更?当然为什么不呢?

c++ - C++ 中的多线程事件处理

python - 在 Python 中创建一个简单的聊天应用程序(套接字)