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

等待函数返回,直到JavaFX线程中的JFrame关闭

,可以通过使用JavaFX的Platform.runLater()方法来实现。

JavaFX是一个用于创建富客户端应用程序的框架,它提供了丰富的图形界面组件和多媒体处理功能。在JavaFX中,界面的更新和事件处理是在JavaFX线程中进行的,而不是在主线程中进行。因此,当需要等待JavaFX线程中的JFrame关闭时,可以使用Platform.runLater()方法将等待函数放入JavaFX线程的消息队列中,等待JavaFX线程处理完其他任务后再执行。

以下是一个示例代码:

代码语言:java
复制
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class WaitForJFrameClose extends Application {

    private static boolean isJFrameClosed = false;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Button button = new Button("Close JFrame");
        button.setOnAction(event -> {
            // 关闭JFrame时设置标志位
            isJFrameClosed = true;
            primaryStage.close();
        });

        StackPane root = new StackPane();
        root.getChildren().add(button);

        Scene scene = new Scene(root, 300, 200);
        primaryStage.setScene(scene);
        primaryStage.show();

        // 等待函数返回,直到JavaFX线程中的JFrame关闭
        waitForJFrameClose();
    }

    private void waitForJFrameClose() {
        while (!isJFrameClosed) {
            try {
                // 等待一段时间再检查标志位
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        // 执行其他操作
        System.out.println("JFrame已关闭,可以继续执行其他操作");
    }
}

在上述代码中,通过设置一个标志位isJFrameClosed来表示JFrame是否关闭。在按钮的事件处理程序中,当点击关闭按钮时,设置isJFrameClosed为true,并关闭JFrame。在waitForJFrameClose()方法中,使用一个循环来等待isJFrameClosed变为true,然后执行其他操作。

这种方法可以确保等待函数返回,直到JavaFX线程中的JFrame关闭。在实际应用中,可以根据需要进行适当的修改和扩展。

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

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 实现一个带提醒定时器

---- 涉及技术:   使用类似Timer定时器来推迟提醒线程执行便可完成程序主体部分,再辅以JavaFX、AWT来构建GUI界面即可。   ...此处使用ScheduledThreadPoolExecutor(点击此处获取该线程具体用法)这个线程池来实现延时执行功能。...---- 当前涉及问题:   点击开始计时后,无法停止计时(无法获取到线程池中线程并终止它);   线程进程不会因为JavaFX程序关闭而结束,两者这件没有相互约束关系; ---- 源代码...ScheduledThreadPoolExecutor threadPool=new ScheduledThreadPoolExecutor(10); //01.对TextField数字判断...停止计时--->调用TimerCancel()函数,即可关闭整个Timer(也会结束这个Timer线程),此时再重新实例化一个Timer即可。

1.8K10

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

如果信息获取是在actionPerformed实现,则按钮仍保持按下状态,直到对actionPerformed调用返回,不仅按钮弹起需要一段时间,而且一般来说,耗时较长操作也不应当在事件方法执行...虽然,invokeLater在把可运行对象放入队列后就返回,而InvokeAndWait一直等待直到已启动了可运行对象run方法才返回。...对InvokeAndWait调用直到getValue可运行对象run方法返回后才返回。  ...直到invokeAndWait()返回后事件才能派发。 ...因为invokeAndWait正在等待可运行对象被从事件派发线程中派发出去,但是调用SwingUtilities.invokeAndWait线程返回前事件不能派发。

2.5K20
  • Reactor深度探索 顶

    当我们关闭窗口时候,会打印如下内容 [线程 : AWT-EventQueue-0] 清除 jFrame... [线程 : AWT-EventQueue-0] 退出程序......该方法不得不等待任务执行完成,换言之,如果多个任务提交后,返回多个Future逐一调用get()方法时,将会依次blocking,任务执行从并行变成串行。...-9] 加载完成 load()总耗时:6079毫秒 由结果可知,当异步执行时,它并不是由3个线程去执行,而是由同一个线程进行链式执行,之所以加入join,是为了让主线程等待返回。...这里我们可以看到CompletableFuture属于异步操作,如果强制等待结束的话,又回到了阻塞编程方式,并且让我们明白到非阻塞不一定提升性能,因为即便是非阻塞,在异步线程,它一样要使用6秒才能完成...不过同理,在ParalleDataLoader如果不进行completionService.poll()阻塞操作,主线程同样会率先返回,由于线程池中线程并非守护线程,它在主线程完成后会继续执行。

    91010

    18.1 线程

    run()方法,当一个类继承了Thread类之后,就可以在该类覆盖run()方法,将实现该线程功能代码写入到run()方法,同时调用Thread类start()方法执行线程,也就是调用run...当处于运行状态下线程调用Thread类wait(0方法时,该线程便进入等待状态,进入等待状态线程必须调用Thread类notify()方法才能被唤醒,而notifyAll()方法将所有处于等待状态下线程唤醒...join方法,而join()方法使得当前进程暂停,直到调用join()方法线程执行完毕后再执行,所以线程A等待线程B执行完毕后再开始执行。...synchronized定义区域内,这样当其他线程也获取到这个锁时候,必须等待锁被释放时候才能进入到这个区域。...,知道处于同步块线程执行完同步块代码为止。

    66650

    第68篇:javafx编写扫描器UI界面的线程死锁问题及坑点总结

    坑1:多线程添加一个Tab标签直接报错 刚开始用多线程操作javafx控件就遇到了一个报错,向图形界面添加一个图形控件时,报错提示“Not on FX application thread; currentThread...坑4:Tabs标签移除问题 当发送一个扫描任务队列时,TabPane会新建一个Tab标签,每个标签10个线程运行,双击Tab标签,就会停止该任务线程扫描,Tab标签标题会提示“停止..”字样,直到所有活动线程安全结束...,该标签关闭。...后来我终于想明白了,一个TabPane是由多个标签组成,当你双击关闭其中一两个标签时,tabPane所有索引id都变了,而另一个线程对于Tab标签for循环操作还在进行当中,而且还是按照原始索引去遍历...首先使用idea 2022新建项目,JDK选择大于等于jdk8版本即可,小于jdk8不支持javafx。 可以看到idea 2022版本,已经自动在pom.xml文件添加了javafx库了。

    35331

    《Kotin 极简教程》第9章 轻量级线程:协程(2)《Kotlin极简教程》正式上架:

    ,而不阻塞线程;如果延迟任务完成, 则返回结果值或引发相应异常。...context协程继续在主线程执行; 而CommonPool在ForkJoinPool.commonPool; 我们使用newSingleThreadContext函数新建协程上下文,该协程运行在自己线程...它有两个常用方法如下: E take(): 取走BlockingQueue里排在首位对象,若BlockingQueue为空, 阻塞进入等待状态直到BlockingQueue有新数据被加入; put...send函数被挂起直到另外一个协程调用receive函数, 然后receive函数挂起直到另外一个协程调用send函数。它是一个完全无锁实现。...} 其中, close函数在这个通道上发送一个特殊 "关闭令牌"。这是一个幂等运算:对此函数重复调用不起作用, 并返回 "false"。

    1.2K20

    什么是线程以及线程使用+示例

    目录 1、实现线程三种方式 2、线程运用 常用函数: 效果展示 以下是效果图,运用了窗体美化包 ---- 1、实现线程三种方式 继承 Thread类,并重写run()方法; 实现 Runnable...程序负责执行哪个东东就叫做线程(执行路线,进程内部执行序列),或者说是进程子任务。...常用函数:         sleep():设置线程休眠时间,单位毫秒;         yield():方法是停止当前线程,让同等优先权线程运行,如果没有同等优先权线程,那么Yield()方法将不会起作用...join():执行后线程进入阻塞状态,例如在线程B调用线程Ajoin(),那线程B会进入到阻塞队列,直到join结束或中断线程B才开始进入阻塞队列。         ...wait():让线程处于等待状态,并且释放掉抢到锁旗标,其他线程可以继续抢锁旗标。wait()必须在同步代码块执行。

    60710

    【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程 libc.so 动态库 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一、等待远程进程 mmap 函数执行完毕 二、从寄存器获取进程返回值 三、博客资源 前言 前置博客 : 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 |...动态库 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 ) 本博客进行收尾 , 远程调用 mmap 函数后 , 等待函数执行 , 获取该函数执行返回值 ; 一、等待远程进程 mmap...函数执行完毕 ---- 调用 waitpid(pid, &stat, WUNTRACED) 方法 , 阻塞等待 远程进程 mmap 函数执行完毕 , 直到远程进程状态位 WUNTRACED 时 ;...---- 等待远程进程 mmap 函数执行完毕返回后 , 先调用 ptrace_getregs 方法 , ptrace_getregs(target_pid, regs) 获取远程进程 寄存器信息...; 然后读取该寄存器数据 EAX 寄存器值 , 用于获取远程执行 dlopen 函数返回值 , 返回是 libbridge.so 动态库首地址 ; /* 读取寄存器返回值 */ long ptrace_retval

    64920

    java 实现一个单线程资源下载器

    实现一个简单基于单线程资源下载器,如图所示,用户可以任意指定下载资源链接地址,系统根据该地址判断资源是否存在,如果存在,则将该资源下载到本地。...GUI 设计基本流程 先记录一下 GUI 设计基本流程: 根据需要从相应顶层容器继承(如果创建窗体就继承 JFrame,对话框就继承 JDialog),新建一个子类。...然后设置顶层容器属性,包括大小、位置、标题和关闭事件等。 设置界面上 GUI 组件事件响应。...ActionListener { private final JPanel panel=new JPanel(); private final JLabel label1=new JLabel("网络资源线程下载...JFrame 子类对象调用方法设置 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //默认关闭事件 StartButton.addActionListener

    62920

    Java项目实战之天天酷跑

    并在main函数调用 //2.2 start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标 start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: ? 3、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 ? 4、返回主界面 同理。 ?

    2.5K20

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

    并在main函数调用 //2.2 start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标 start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: ? 3、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 ? 4、返回主界面 同理。 ?

    1.8K21

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

    并在main函数调用   //2.2   start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标   start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: 三、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 四、返回主界面 同理。 五、直接退出 同理。

    1.6K30

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

    并在main函数调用 //2.2 start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标 start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: ? 3、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 ? 4、返回主界面 同理。 ?

    1.4K20

    Java项目实战之天天酷跑

    并在main函数调用 //2.2 start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标 start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: ? 3、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 ? 4、返回主界面 同理。 ?

    2.5K20

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

    并在main函数调用 //2.2 start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标 start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: ? 3、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 ? 4、返回主界面 同理。 ? 5、直接退出 同理。

    2.2K30

    同步、异步、阻塞、非阻塞

    这样用户在线等待时间太长,给用户一种卡死了感觉(就是系统迁移,点击了迁移,界面就不动了,但是程序还在执行,卡死了感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。...对于同步调用来说,很多时候当前线程还是激活,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket调用Receive函数,如果缓冲区没有数据,这个函数就会一直等待直到有数据才返回。...而此时,当前线程还会继续处理各种各样消息。如果主窗口和调用函数在同一个线程,除非你在特殊界面操作函数调用,其实主界面还是应该可以刷新。...socket接收数据另外一个函数recv则是一个阻塞调用例子。当socket工作在阻塞模式时候, 如果没有数据情况下调用该函数,则当前线程就会被挂起,直到有数据为止。...非阻塞 非阻塞和阻塞概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回

    3K40

    天天酷跑,如何用 Java 来实现?(附源码)

    并在main函数调用 //2.2 start = new JLabel(new ImageIcon("Image/hh1.png"));//ImageIcon:图标 start.setBounds...(线程) 我们想要实现动态缓冲加载过程,让进度条动起来,就需要引入线程概念了。 线程: Thread类这样定义: 线程是程序执行线程,Java虚拟机允许程序同时运行多个执行线程。...举个例子,你用百度网盘下载一部电影,这就是一个线程。而如果你同时下载多部电影,这就是多线程了。 1.线程有6种状态:新建,运行,阻塞,等待,计时等待和终止。...等待:当线程等待其他线程通知调度表可以运行时。 计时等待:对于一些含有时间参数方法,如Thread类sleep() 。 终止:当run()方法运行完毕或出现异常时。...而总分,我在Person类,设定了一个简单计分规则: 3、再来一次 在鼠标点击事件内,new一个新加载界面,加载完成后自动进入游戏。 4、返回主界面 同理。

    1.4K30

    java swing入门教程_java swing基础(菜鸟教程学习)

    javax.swing.*; public class HelloWorldSwing{ 创建并显示GUI,出于线程安全考虑 //这个方法在事件调用线程调用 private static void...日常用JFrame创建一个窗口对象frame,然后设置关闭JFrame frame = new JFrame(“Login Example”); frame.setDefaultCloseOperation...); //创建文本域(JTextField函数) 嗯,学到了 新函数 用来创建文本域输入信息 JTextField userText = new JTextField(20); userText.setBounds...JFrame javaGUI程序基本思路是以JFrame为基础,说白了就是窗体屏幕它是屏幕上window对象,能够最大化,最小化,关闭。...JPanel java图形用户界面(GUI)工具包swing面板容器类,包含在javax.swing包,可以进行嵌套,功能是对窗体具有相同逻辑功能组件进行组合,是一种轻量级容器,可以加入到JFrame

    2.5K20

    ApacheCN Java 译文集 20211012 更新

    优先使用标准函数式接口 45. 明智审慎地使用 Stream 46. 优先考虑流无副作用函数 47. 优先使用 Collection 而不是 Stream 来作为方法返回类型 48....返回数组或集合,不要返回 null 55. 明智审慎地返回 Optional 56. 为所有已公开 API 元素编写文档注释 57....第一个编程步骤 二、了解 Java 类、对象及其用法 三、在 Java 处理字符串及其函数 四、Java 程序–循环和条件构建块 五、您需要了解关于接口和继承所有信息 六、了解有关数组所有信息...窥探 二、面向对象编程快速通道-类和接口 三、模块化编程 四、走向函数式 五、流和管道 六、数据库编程 七、并发和多线程编程 八、更好地管理操作系统进程 九、使用 springboot restfulWeb...Lambda 表达式 十三、Java 9 模块化 十四、练习答案 面向初学者 Java 编程 零、前言 一、Java 入门 二、理解类型化变量 三、分支 四、数据结构 五、函数 六、Java

    2.5K10
    领券