首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何暂停主Swing线程直到Swing计时器结束?

在Swing中,可以使用javax.swing.Timer类来创建计时器。当计时器结束时,可以通过调用stop()方法来停止计时器。如果希望在主Swing线程中等待计时器结束,可以使用Thread.sleep()方法来暂停主线程。

下面是一个示例代码:

代码语言:txt
复制
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {
    public static void main(String[] args) {
        // 创建计时器,每秒触发一次
        Timer timer = new Timer(1000, new ActionListener() {
            int count = 5; // 设置计时器触发次数

            @Override
            public void actionPerformed(ActionEvent e) {
                if (count > 0) {
                    System.out.println("计时器触发:" + count);
                    count--;
                } else {
                    ((Timer) e.getSource()).stop(); // 停止计时器
                }
            }
        });

        // 启动计时器
        timer.start();

        // 暂停主线程直到计时器结束
        while (timer.isRunning()) {
            try {
                Thread.sleep(100); // 暂停主线程
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("主线程继续执行");
    }
}

在上述代码中,创建了一个计时器,每秒触发一次,总共触发5次。在计时器的actionPerformed()方法中,判断计时器触发次数,如果还未达到设定的次数,则输出触发信息并减少计数器值;如果达到设定的次数,则调用stop()方法停止计时器。

在主线程中,使用while循环判断计时器是否仍在运行,如果计时器仍在运行,则使用Thread.sleep()方法暂停主线程。当计时器结束后,主线程继续执行。

这种方式可以实现暂停主Swing线程直到Swing计时器结束的效果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云云原生应用引擎:https://cloud.tencent.com/product/tke
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维:https://cloud.tencent.com/product/cvm
  • 腾讯云音视频处理:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobility
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencentmetaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

idea插件开发指南_idea get set插件

如果是同一天,需要继续上次编程已用时间继续计时,否则从0开始计时 当应用程序关闭的时候,需要终止计时器,并放弃所有的任务,同时释放计时器内存。 如果今日可跳过,那么结束。...然后是了解了idea中的消息系统,以及idea是如何实现的消息系统,idea中各个控件如何相互配合,多个线程之间的状态如何进行数据的传递,以及Idea对消息系统中发布订阅模型的客户化修改。...除此之外,对jdk中提供的计时器有了一定的了解,计时器的使用,原理和计算方式。 接着是如何使用swing中的进度条的控件,包括进度条的创建,使用和更新,以及进度条值得监控。...swing计时器的适配,使得使用计时器更新进度条更加简便。 在后则是idea中提供的对话框的封装,以及如何使用重写机制,来修改父类中对话框的绘制,以及如何创建对话框,展示对话框和关闭对话框。...在对话框中了解到了swing中对于多个线程对相同数据的竞争是如何解决的,以及EDT线程是什么,如何避免EDT线程检测,如何正确的在EDT线程之外操作swing的界面。

5.6K21
  • Java项目实战之天天酷跑

    移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能 5、结束界面 获取玩家的得分、跑酷距离。...LoginFrame作用域一直到最后一个} ? LoginPanel的代码块: ? 运行结果截图: 1.界面 ? 2.登录 2.1、用户名及密码输入为空的情况: ?...四、游戏界面 接上文,接下来将实现游戏界面,功能如下: 移动的背景图片、动态的玩家、玩家的移动功能、 五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能。...此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停! ? 6、结束逻辑 ?...4、返回界面 同理。 ? 5、直接退出 同理。 ?

    2.5K20

    不敢相信,居然用Java写了个“天天酷跑”!

    移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能  5、结束界面  获取玩家的得分、跑酷距离。...LoginFrame作用域一直到最后一个} LoginPanel的代码块: 运行结果截图: 1.界面 2.登录 2.1、用户名及密码输入为空的情况: 2.2、用户名或密码输入错误的情况: 2.3...(四):游戏界面 接上文,本文将实现游戏界面,功能如下: 移动的背景图片、动态的玩家、玩家的移动功能、 五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能。...代码如下: 此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停! 6、结束逻辑 后面再实现。...四、返回界面 同理。 五、直接退出 同理。

    1.6K30

    大佬带路,用Java实现天天酷跑(附源码),网友:这也太TM屌了~

    移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能 5、结束界面 获取玩家的得分、跑酷距离。...LoginFrame作用域一直到最后一个} ? LoginPanel的代码块: ? 运行结果截图: 1.界面 ? 2.登录 2.1、用户名及密码输入为空的情况: ?...四、游戏界面 接上文,接下来将实现游戏界面,功能如下: 移动的背景图片、动态的玩家、玩家的移动功能、 五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能。...此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停! ? 6、结束逻辑 ?...4、返回界面 同理。 ? 5、直接退出 同理。 ?

    1.4K20

    太完整了!三万字Java项目实战之天天酷跑

    移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能 5、结束界面 获取玩家的得分、跑酷距离。...LoginFrame作用域一直到最后一个} ? LoginPanel的代码块: ? 运行结果截图: 1.界面 ? 2.登录 2.1、用户名及密码输入为空的情况: ?...四、游戏界面 接上文,接下来将实现游戏界面,功能如下: 移动的背景图片、动态的玩家、玩家的移动功能、 五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能。...此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停! ? 6、结束逻辑 ?...4、返回界面 同理。 ? 5、直接退出 同理。 ?

    1.8K21

    Java项目实战之天天酷跑

    移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能 5、结束界面 获取玩家的得分、跑酷距离。...LoginFrame作用域一直到最后一个} ? LoginPanel的代码块: ? 运行结果截图: 1.界面 ? 2.登录 2.1、用户名及密码输入为空的情况: ?...四、游戏界面 接上文,接下来将实现游戏界面,功能如下: 移动的背景图片、动态的玩家、玩家的移动功能、 五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能。...此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停! ? 6、结束逻辑 ?...4、返回界面 同理。 ? 5、直接退出 同理。 ?

    2.5K20

    用Java实现天天酷跑(附源码),这个真的有点强了!

    移动的背景图片、动态的玩家、五种障碍物持续出现、玩家和障碍物的碰撞、 暂停、继续功能、玩家的移动功能 5、结束界面 获取玩家的得分、跑酷距离。...LoginFrame作用域一直到最后一个} ? LoginPanel的代码块: ? 运行结果截图: 1.界面 ? 2.登录 2.1、用户名及密码输入为空的情况: ?...四、游戏界面 接上文,接下来将实现游戏界面,功能如下: 移动的背景图片、动态的玩家、玩家的移动功能、五种障碍物持续出现、玩家和障碍物的碰撞、暂停、继续功能。...此处的 flag 来源于上面程序启动的方法中,不难看出只要按了空格键,就能实现生成、移动、绘制方法的暂停,也就相当于画面的静止、游戏的暂停! ? 6、结束逻辑 ?...4、返回界面 同理。 ? 5、直接退出 同理。 ?

    2.2K30

    Swing 的任务线程与 EDT 事件分发队列模型

    Swing线程安全靠事件队列和EDT来保证。 EventQueue的派发机制由单独的一个线程 - 事件派发线程(EDT)管理。 Swing将GUI请求放入一个事件队列中执行。...3 Swing 中的线程分类 一个Swing程序中一般有下面三种类型的线程: 初始化线程(Initial Thread) 每个程序必须有一个main方法作为程序的入口。...一旦GUI启动后,对大多数事件驱动的桌面程序,初始化线程的工作就结束了。...同步的,它被调用结束会立即阻塞当前线程直到EDT处理完该请求。 一般用于取得Swing组件的数据。...."); 如果从事件分发线程(例如,从JButton的ActionListener)调用invokeLater,则 doRun.run 仍将延迟,直到处理完所有未决事件。

    1K21

    18.1 线程

    }   当执行一个线程程序的时候,就会自动产生一个线程方法正式在这个线程中运行的。...当不再启动其他线程的时候,这个程序就是一个单线程程序,方法线程的启动由java虚拟机负责,程序员负责启动自己的线程。   ..., 即便该线程没有结束。...,这两个线程都负责进度条的滚动,在现场A的run()方法中使线程B的对象调用join方法,而join()方法使得当前进程暂停直到调用join()方法的线程执行完毕后再执行,所以线程A等待线程B执行完毕后再开始执行...在多任务操作系统中,每个线程都有一小段的CPU时间片运行,在时间结束后,将轮换到另一个线程进入运行状态,这时系统会选择与当前线程优先级相同的线程予以运行。

    66650

    Java游戏编程不完全详解-3(爆肝一万七千字)

    怎样呈现自己的组件问题,因为普通的Swing应用,我们不必呼叫paintComponents()方法—Swing会在AWT事件分发线程中自动呈现所有的组件。...**注意:**因为Swing组件是非线程安全的,所以当一个Swing组件可见时,我们不可能在AWT事件分发线程中修改它的状态。...Swing会判断该点击,然后检查该按钮是否有监听器。 如果有,那么监听器会通知AWT事件分发器线程,说明该按钮被按下了。...该类的setPause()方法用来设置暂停按钮放在JPanel中,该面板还有其它的菜单功能按钮,当用户点击暂停和非暂停动作时,该面板会正确显示相应的按钮。...当这一切完成之后,还需要该组件把键盘焦点送回游戏窗体。

    2.2K10

    JDK7新特性概览JSR292:支持动态类型语言(InvokeDynamic)G1 垃圾回收器(Garbage-First Collector)JSR334:小的语言改进(Project Coin)核

    Concurrent 包的改进 java.util.concurrent 包引入了一个轻量级的 fork/join 的框架来支持多核多线程的并发计算。...最后,ThreadLocalRandom 类提供了线程安全的伪随机数生成器。 国际化(i18n) 支持 Unicode 6.0。...图形界面客户端 Swing 的 Nimbus 外观感觉 Nimbus 是 Swing 上新一代的跨平台外观感觉 (Look & Feel)。...其实 Nimbus 在 Java 6 中已经存在,但直到 Java 7 才被移到了标准 Swing 的名字空间(javax.swing)。...Window.setShape(Shape) Window.setBackground(Color) 详细内容可以查看教程“How to Create Translucent and Shaped Windows”,了解如何使用透明不规则窗体的

    2.3K100

    《Java 2 图形设计卷Ⅱ- SWING》第2章 Swing的基本知识

    Swing线程不安全的,这就是说,在大多数情况下,只能从事件派发线程中访问Swing组件。...设计一个线程安全的工具包就更不是一个简单的事情。例如,确定如何同步对类的访问就是一个复杂的任务(注:参见Lea,Doug,“java中的并发编程”,Addison-Wesley,1997。)。...从事件派发线程调用invokeAndWait()所带来的问题是:invokeAndWait()锁定调用它的线程直到可运行对象从事件派发线程中派出去并且该可运行对象的run方法激活。...直到invokeAndWait()返回后事件才能派发。 ...当多线程被引入到面向对象语言中以后,人们遇到的较困难的领域之一就是如何扩展线程安全的类。相比之下,Swing开发人员使用的单线程方法使得类很容易扩展。

    2.5K20

    Java线程面试题 Top 50

    当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。...29) 怎么检测一个线程是否拥有锁? 我一直不知道我们竟然可以检测一个线程是否拥有锁,直到我参加了一次电话面试。...Yield方法可以暂停当前正在执行的线程对象,让其它有相同优先级的线程执行。...它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证使其它线程一定能占用CPU,执行yield()的线程有可能在进入到暂停状态后马上又被执行。...这里的阻塞是指调用结果返回之前,当前线程会被挂起,直到得到结果之后才会返回。此外,还有异步和非阻塞式方法在任务完成前就返回。 40) Swing线程安全的吗?为什么?

    1.1K20

    Java---网络蜘蛛-网页邮箱抓取器~源码

    迫不及待的做了这个网页邮箱抓取~~~ 自己以前做过微商,而且还掏钱买过抓取网络邮箱的软件~现在O(∩_∩)O哈哈~我自己做~当然啦,没有别人做得好~只是功能还是差不多啦~ 给一个带协议的网站~然后深入网页中查找邮箱~ 因为博知识有限...~线程池目前还没有学~导致无法控制线程~~~见谅~ 还有~就是没有设置停止按钮~也是因为没学线程池~水平不够啊~ 只能关闭软件来停止程序~ package cn.hncu.bs; import...new javax.swing.JLabel(); btnRun = new javax.swing.JButton(); jButton1 = new javax.swing.JButton...new RunThread(url, time, dout, doutHttp,path).start(); //System.out.println("主线程线程读取完...IOException e) { //System.out.println("URL异常"); return; } } } 程序界面图

    50910
    领券