代码执行结果显示无序

时间:2018-01-23 14:17:43

标签: java netbeans

我打算让用户按一个按钮,执行以下步骤:

  1. 在日志(jTextField);
  2. 中显示消息“正在进行的功能...”
  3. 为函数拟合运行一些繁重的计算;
  4. 计算完成后,在日志中写入“功能配件完成”。
  5. 实际发生的事情:

    1. 按下按钮后立即开始计算;
    2. 计算完成后,同时在日志中显示“..in progress ...”和“..complete”消息;
    3. 尝试解决问题的解决方案:

      我尝试在第一个和第二个动作之间添加时间延迟(TimeUnit.SECONDS.sleep(1);),结果是一样的。

      已实施的代码如下:

      private void jButton33ActionPerformed(java.awt.event.ActionEvent evt){
          add_to_log("function fitting in progress...");
          FunctionFitter3step FF3step  = new FunctionFitter3step(/*variables for the constructor, which does all the heavy calculations*/);
          add_to_log("function fitting complete!");
      }
      
      
      void add_to_log (String input_string){
          DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
          LocalDateTime now = LocalDateTime.now();
          this.log_string = this.log_string + " [" + dtf.format(now) + "] " + input_string + "\n";
          This.jTextField_program_log.setText(this.log_string);
      }
      

1 个答案:

答案 0 :(得分:1)

您的FunctionFitter3step显然是异步运行的。你需要使用某种回调。这是一种方式:

  • Runnable参数添加到FunctionFitter3step
  • 的参数列表中
  • 将日志语句包装为Runnable
  • FunctionFitter3step代码调用runnable.run()作为最后一步

假设Java 8:

FunctionFitter3step FF3step  = new FunctionFitter3step(/*variables*/, () -> add_to_log("function fitting complete!"));