等待JavaFX Application Thread完成处理事件?

时间:2016-04-24 09:17:27

标签: java multithreading testing javafx concurrency

这里有很多问题,询问如何暂停后台线程的JavaFX应用程序线程,但我希望相反!

我试图测试一系列关键输入完全处理所需的时间。我正在为JavaFX使用Automaton测试库,而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应用程序线程何时完成处理我生成的四个按键事件。

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

使用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) {
  ...
}