Java 在代码执行中添加延迟

Java 在代码执行中添加延迟,java,swing,timer,loading,delay,Java,Swing,Timer,Loading,Delay,我花了很多时间研究线程.sleep和定时器函数。本质上,我正在编写一个抵押贷款计算器,它应该在计算时模拟几秒钟。理想情况下,我希望出现一条消息,说“正在计算…”,然后它会在一两秒钟后将结果窗口设置为可见 Thread.sleep似乎忽略了它在代码中的位置,因此我的setText中的“计算…”永远不会结束。这就是我遇到定时器的原因 计时器似乎部分工作,但在计时器完成之前,它不会停止运行代码。。。它移到下面几行 有什么帮助吗?附加我的代码块 ActionListener taskPerformer

我花了很多时间研究
线程.sleep
定时器
函数。本质上,我正在编写一个抵押贷款计算器,它应该在计算时模拟几秒钟。理想情况下,我希望出现一条消息,说“正在计算…”,然后它会在一两秒钟后将结果窗口设置为可见

Thread.sleep
似乎忽略了它在代码中的位置,因此我的
setText
中的“计算…”永远不会结束。这就是我遇到定时器的原因

计时器
似乎部分工作,但在计时器完成之前,它不会停止运行代码。。。它移到下面几行

有什么帮助吗?附加我的代码块

ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        //...Perform a task...

        errorPromptLabel.setText("Checking your results! Please wait...");
        errorPromptLabel.setVisible(true);
    }
};

Timer timer = new Timer( 1000 , taskPerformer);
timer.setRepeats(false);
timer.start();

// This code is supposed to run AFTER the timer to show the results

CalculationResults f = new CalculationResults(String.valueOf(loanAmountInt), String.valueOf(loanInterestInt), String.valueOf(loanPeriodInt), String.valueOf(monthlyRepaymentInt), checkMonthlyRepayment, checkLoanPeriod);
this.setVisible(false);
f.setVisible(true);
this.dispose();

您需要创建一个对话框,该对话框带有“计算…”消息,然后使用计时器取消该对话框并继续处理

计时器是异步运行的

尽管所有计时器都使用单个共享线程(由执行的第一个计时器对象创建)执行等待,但计时器的操作事件处理程序在另一个线程上执行——事件调度线程。这意味着计时器的操作处理程序可以安全地对Swing组件执行操作。然而,这也意味着处理程序必须快速执行以保持GUI的响应性

在你的情况下,你似乎颠倒了这个过程。ActionListener应该处理“计算…”消息并设置结果,在调用计时器之前设置对话框


这里使用Thread.sleep()是错误的

仅供参考-我曾考虑将CalculationResults visible调用添加到计时器任务中,但我不确定如何将该对象作为ActionListener的参数传入。如果希望访问子对象,可以将ActionListener子类化以获取窗体/面板的实例。它不必是匿名ActionListener实例——它只需要支持ActionListener接口。