这里有很多问题是关于如何为后台线程暂停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。
我想精确地测量JavaFX应用程序线程何时处理完我生成的四个按键事件。
我该怎么做呢?谢谢!
发布于 2016-05-02 07:48:00
使用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) {
...
}
https://stackoverflow.com/questions/36821260
复制