首页 > 解决方案 > Countdownlatch 无异常挂起或终止

问题描述

我正在研究 java fxml,我在其中接受 2 个输入并使用它们来运行脚本。我在脚本的执行点暂停

我的问题是当我只提供 1 个输入(例如 1 2 add 3 equal)时,代码运行良好,但是当我提供 2 个输入(例如 1 2 add 和 3 equal)时,代码最后在 countDownLatch.await() 处停止步骤并且不打印脚本输出。

我从 fxml 按钮开始单击如下所示

Executors.newSingleThreadExecutor().submit(()-> {
method(ui_inputs1);
method(ui_inputs2)
}):

我试图在 FXML UI 中实现暂停,即直到用户单击下一个类似调试的东西,用户将在其中选择 UI 点暂停。

所以像这样

public void onExcecute(
if (debugMode) {

//check is breakpoint the do Platform.runLater(() + UI updates//
countDownLatch.await();
countDownLatch = new CountDownLatch(1);

}
}

当用户单击“播放下一步”按钮时,它会移动到下一步,直到到达执行点

   public void onHitBreakpoint() {
    Platform.runLater(()->{
        addStackDebug(listener,false);});
}

 playToNextExecPoint() {
 countDownLatch.countDown();
 }

 public void onfinish{
// script success or failed
}

正确执行的控制台日志是:

让我们解析 1 2 ADD 3 EQUAL

执行 OP_CODE 操作:[1]

让我们解析 1 2 ADD 3 EQUAL

--------按“播放”继续--------

执行 OP_CODE 操作:[2]

让我们解析 2 ADD 3 EQUAL

--------按“播放”继续--------

执行 OP_CODE 操作:[添加]

让我们解析 ADD 3 EQUAL

--------按“播放”继续--------

执行 OP_CODE 操作:[3]

让我们解析 3 EQUAL

--------按“播放”继续--------

执行 OP_CODE 操作:[EQUAL]

让我们解析 EQUAL --------Press 'Play' To Continue-------- 脚本成功。脚本成功。

当我提供 2 个输入时,缺少粗体和斜体的打印

标签: javamultithreadingjavafx-8executorservicecountdownlatch

解决方案


推荐阅读