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

在Swing-app中应该从哪个线程调用System.exit()?

在Swing-app中,应该从事件调度线程(Event Dispatch Thread)调用System.exit()。

Swing是基于事件驱动的桌面应用程序开发框架,它使用事件调度线程来处理用户界面事件和更新UI组件。在Swing应用程序中,所有与UI相关的操作都应该在事件调度线程中执行,以确保线程安全性和避免UI冻结。

System.exit()是Java中用于终止虚拟机的方法。由于Swing的事件处理是在事件调度线程中进行的,因此如果在其他线程中调用System.exit(),可能会导致应用程序异常终止或出现不可预料的行为。

为了正确地调用System.exit(),可以使用SwingUtilities类的invokeLater()方法将System.exit()的调用放在事件调度线程中执行。示例如下:

代码语言:java
复制
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        System.exit(0);
    }
});

这样可以确保System.exit()在事件调度线程中被调用,避免潜在的线程安全问题。

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

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

相关·内容

图数据上做机器学习,应该哪个点切入?

这些功能非常强大,由于它们的性质很好理解,并且开源库中有大量的实现,所以应该将它们视为一个调用的接口。 使用图机器学习的挑战是什么?...在此设置,需要建立一个系统来,给模型输入满足要求的图数据,然后进行预测(可能需要再一次图数据库取数据),最后,得到的预测可以送到用户手里,或给到后续的系统。...由于许多图机器学习还处于早期研究阶段,所以找到一种有效的方法之前,你应该尝试许多方法。...,也可以用来改进现有的不完善数据(例如,这项任务属于哪个项目?)...如果节点创建嵌入时使用随机游走(例如使用Node2Vec)他们将把本地的结构信息(例如,节点属于哪个社区,或者这个节点属于哪个超结构的一部分)这可能和分类或评分有关(例如,不同的子图的聚类)。

1.2K20

Visual Studio 2019 (16.5) 查看托管线程正在等待的锁被哪个线程占用

功能入口 这个功能没有新的入口,你可以调用堆栈” (Call Stack) 窗口,“并行堆栈” (Parallel Stacks) 窗口,以及“线程”窗口的位置列查看哪个托管线程正在持有 .NET...); Console.WriteLine("主线程成功获得锁"); thread.Start(); } 在这段代码,主线程获得锁之后直接退出,而新线程“walterlv thread...打开调用堆栈窗口(“调试 -> 窗口 -> 调用堆栈”),可以看到堆栈最顶端显示了正在等待锁,并且指出了线程对象。 ?...然后在线程窗口(“调试 -> 窗口 -> 线程“)的位置列,鼠标移上去可以看到与堆栈相同的信息。 ? 当然,我们的主线程实际上早已直接退出了,所以正在等待的锁将永远不会释放(除非进程退出)。...同样的信息,并行堆栈(“调试 -> 窗口 -> 并行堆栈”)也能看到。 ?

2.1K10
  • Java常见的坑(二)

    正如你说知道的一样,finally语句块确实是会执行,但是执行过程中发生了一件重要的事情,System.exit(0)方法将停止当前线程和所有其他当场死亡的线程。...(0); 12 } 13 当System.exit()方法被执行时,虚拟机(VM)关闭前需要进行两项清理工作。...通过调用 System.Halt 可以不执行关闭挂钩的情况下停止 VM,但是很少使用这个方法。...无论哪个抛出异常,看起来catch子句都应该捕获它,但是当你运行之后你会发现根本没有捕获异常,它抛出了StackOverflowError异常,为什么呢?...与大多数StackOverflowError异常一样,本程序也包含了一个无限递归,当你调用一个构造器时,实例变量的初始化操作将先于构造器的程序体运行,上述例子,internalInstance变量的初始化操作递归调用了构造器

    55310

    如何优雅地停止Java进程

    2.Hook线程会延迟JVM的关闭时间,这就要求在编写钩子过程必须要尽可能的减少Hook线程的执行时间,避免hook线程中出现耗时的计算、等待用户I/O等等操作。...5.不能在钩子调用System.exit(),否则卡住JVM的关闭过程,但是可以调用Runtime.halt()。...System.exit():通常我们程序运行完毕之后调用,这是应用代码写死的,无法进程外部进行调用。...因为单纯地监听信号量,并不能覆盖到异常关闭JVM的情形(如:RuntimeException或OOM),这种方式与注册关闭钩子的区别在于: 1.关闭钩子是独立线程运行的,当应用进程被kill的时候...信号时修改该flag,程序便会正常结束;或者handle函数调用System.exit())。

    6.3K31

    Java - 探究Java优雅退出的两种机制

    执行时机: ShutdownHook以下情况下会被执行: 程序正常退出(调用System.exit(int status)方法) 用户按下Ctrl+C终止程序 操作系统关闭 JVM崩溃 执行顺序...调用Java程序的信号处理器: 信号处理函数收到信号后会调用Java程序中注册的信号处理器,执行相应的处理逻辑。...避免ShutdownHook调用System.exit():如果在ShutdownHook调用System.exit(),会导致当前的JVM进程卡住,无法正常退出。...这是因为System.exit()会触发终结器(Terminator)进程,这是一个操作系统级别的操作,它会等待当前进程的所有线程都结束之后,才会释放资源并退出进程。...因此,如果在ShutdownHook调用System.exit(),会导致资源无法正确释放,从而可能引发资源泄漏。

    22200

    那些你曾错过的Java题(一)

    答案:B,D 2 2.对于Java异常的描述正确的是? A.用throws定义了方法可能抛出的异常,那么调用此方法时一定会抛出此异常。...分析: A错 调用此方法的时候 也可以再次申明以将异常交由更高一级处理。 B错 finally块的语句一定会被执行。除非catch块中有System.exit(0)。...这些异常一般是由程序逻辑错误引起的,程序应该逻辑角度尽可能避免这类异常的发生。...官方说是不安全的 答案:D 4 java 哪个关键字可以对对象加互斥锁?...synchronized 用于多线程的同步。用来给对象和方法或者代码块加锁,各线程互斥访问。 volatile 修饰的成员变量每次被线程访问时,都强制共享内存重新读取该成员变量的值。

    53820

    Junit单元测试不支持多线程测试问题全解析

    三、解决方案 所有的解决方法的核心是:线程没结束之前让主线程阻塞住。...但是在其中提到的TestRunner各个退出虚拟机的地方断点,整个运行过程没有一个断点停下来。 上调用栈大法: 我们发现主函数的入口是Idea的jar包。...我们双击调用栈这里,发现进不去源码(正常是可以双击进去的)。 肿么办?难道就此放弃??应该不是我们的风格。  皮皮虾我们走,去找源码去。 在网上搜了半天没找到,囧.... 然后,我们就此放弃??...,main方法会调用System.exit退出虚拟机,如果子线程耗时较长,导致子线程没执行完就销毁了。...即test方法运行在主线程,外层函数执行完test等操作后执行System.exit来退出虚拟机,这个时候thread1和thread2可能还没执行完,就被销毁了。

    1.1K20

    Java每日一练(2017719)

    若有定义语句: int a=10 ; double b=3.14 ;则表达式 ’A’+a+b 值的类型是() A char B int C double D float ---- (单选题) 3、系统调用重载函数时...,能作为确定哪个重载函数被调用的依据是() A 函数返回类型 B 参数个数 C 函数名称 D 参数名称 ---- (单选题)4、以下代码运行输出的是 public class Person{ private...如果 try 语句块正常结束,那么 try 语句块的语句都执行完之后,再执行 finally 语句块。...还有一种特殊情况, try 语句块执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行,那么就不会执行finally语句块 ---- (单选题) 2、Java的集合类包括...本体的s定义方法中所以为局部变量--没有初始值。变量没有初始值就使用了,编译通不过 ---- (不定项选择题)4、 以下集合对象哪几个是线程安全的?

    64080

    RocketMq之Broker源码分析

    大概就是先通过netty.bootstrap.connect()方法建立通信连接 调用netty.channel.writeAndFlush()方法进行请求 把topic信息放入请求体,把Broker...ConsumeQueue 是消息逻辑队列,相当于字典目录,用来指定消息 CommitLog 的位置。...每当放一个新的消息的index进来,首先取MessageKey的hashCode,然后用hashCode对slot总数取模,得到应该放到哪个slot,slot总数系统默认500W个。...每个slot中放的指针值是索引indexFile的偏移量,如上图,每个索引大小是20字节,所以根据当前索引是这个文件的第几个(偏移量),就很容易定位到索引的位置。...Broker是怎么响应consumer的拉取请求的 Broker 先通过 topic + queueId 去获取ConsumeQueue,然后通过ConsumeQueue的offset CommitLog

    93720

    system.exit(0)和system.exit(1)区别

    参考链接: JavaSystem.exit() 1、查看java.lang.System的源代码,我们可以找到System.exit(status)这个方法的说明,代码如下:  /**      *...一般Windows底下,不正常退出状态码为-1,这里可写为System.exit(-1);  System.exit(int status)方法效果等同于于Runtime.getRuntime().exit...(int n)方法  特殊案例分析:main方法,启动一个自定义线程,并执行system.exit方法  自定义线程代码:  package com.java.demo; public class...word--------1”.但是自定义线程的run()方法输出的内容没有打印。...以下是我根据程序执行结果,描绘的程序执行图:  留个思考问题:如果在线程销毁方法调用jvm退出方法,那我们的执行结果会发生怎么样的改变?

    1.2K30

    Android 实现彻底退出自己APP 并杀掉所有相关的进程

    android.os.Process.killProcess(runningAppProcessInfo.pid); } } android.os.Process.killProcess(android.os.Process.myPid()); System.exit...KillProcess() android.os.Process.killProcess(android.os.Process.myPid()) 可以杀死当前应用活动的进程,这一操作将会把所有该进程内的资源(包括线程全部清理掉...System.exit() System.exit() 是 Java 结束进程的方法,调用它将关闭当前的 JVM 虚拟机。...//表示是正常退出; System.exit(0); //表示是非正常退出,通常这种退出方式应该放在catch块 System.exit(1); 3....App crash 后重启 利用Android两行代码真正杀死你的App 上面链接的文章写得很好很全面,参考即可 以上这篇Android 实现彻底退出自己APP 并杀掉所有相关的进程就是小编分享给大家的全部内容了

    7.3K21

    Android基础部分再学习---activity的生命周期

    例如,如果你的活动有一个线程在后台运行下载网络数据,它可以onCreate()创建该线程【一般onStart里面创建更好子线程,主要是onCreate()只有5秒的响应时间】,然后onDestroy...()停止线程。...整个生命周期的活动,系统可能会调用onStart()和onStop()多次,因为活动之间交替进行隐藏或显示给用户。...(这个需要根据实际情况来确定) 2、onDestory 确定某些资源是否没有被释放,做一些最终的清理工作,比如在这个Activity的onCreate开启的某个线程,那么就要在onDestory确定它是否结束了...因为Stopped状态重启之后, onStart和onRestart方法都会被执行,所以我们要判断哪些操作分别要放在哪个方法里面 。

    88920

    更正《深入理解高并发编程(第1版)》的一处错误!

    于是,我赶紧打开IDEA,下载了一套JDK8的Java源码,开始JDK8源码添加各种日志和debug,最终证实,《高并发之——SimpleDateFormat类的线程安全问题和解决方案》一文对于问题的分析确实是出现了错误...高并发场景下,一个线程对ParsePosition类的索引进行修改,势必会影响到其他线程对ParsePosition类索引的读操作。这就造成了线程的安全问题。 以上问题分析的结论确实存在错误。...()方法先后调用了cal.clear()与cal.set(),也就是先清除cal对象设置的值,再重新设置新的值。...()方法先后调用了cal.clear()与cal.set(),也就是先清除cal对象设置的值,再重新设置新的值。...2.synchronized锁方式 将SimpleDateFormat类对象定义成全局静态变量,此时所有线程共享SimpleDateFormat类对象,此时调用格式化时间的方法时,对SimpleDateFormat

    1.6K30

    -- FE启动过程原理分析2 -- 启动类PaloFe.java

    replacedByEnv(): 这个方法会将配置文件的配置value为shell变量的的数据系统环境变量取出, 替换为真实的值保存在props. 为啥这么做呢, 目前我还有点没有想明白....校验java版本 这个比较简单, 主要代码JdkUtils.checkJavaVersion(), 大家可以自行查看. 5....初始化日志配置 这里通过Log4jConfig.initLogging()方法实现, 逻辑比较简单, 唯一难解的是log4j的配置文件模板是HARD CODEjava代码的, 目前java的方便处理和主要处理方法来看...注意System.exit(0)与System.exit(-1)的区别....注册线程池监控器 Fe很多服务是通过线程池初始化的并执行的, 这里初始化了这些线程池的核心监控指标管理器. Catalog初始化是最复杂的, 也是核心的. 下一篇文章会详细讲解.

    88030

    Android | Jetpack 处理回退事件的新姿势 —— OnBackPressedDispatcher

    OnBackPressedDispatcher 与其他方案对比: OnBackPressedDispatcher 之前,我们只能通过 “取巧” 的方法处理回退事件: 1、 Fragment 定义回调方法..., Activity#onBackPressed() 传递回调事件(缺点:增加了 Activity & Fragment 的耦合关系); 2、 Fragment 根布局设置按键监听 setOnKeyListener...另外,添加回调的 addCallback() 方法也要求线程执行,分发器内部使用非并发安全容器 ArrayDeque 存储回调对象。...那么,我们应该如何选择呢?一般情况下,“调用 moveTaskToBack()” 表现最佳,两个论点: 1、两次点击返回键的目的是挽回用户,确认用户真的需要退出。...解决方法就是 Activtiy 回退逻辑手动弹出 Fragment 事务返回栈。

    1.5K20

    java--第10章 多线程

    所谓多线程是指一个进程执行过程可以产生多个更小的程序单元,这些更小的单元称为线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。...Java中线程实现的方式       Java 实现多线程有两种手段,一种是继承 Thread 类,另一种就是实现 Runnable 接口。...// 调用线程主体         mt2.start() ;   // 调用线程主体     } };        程序可以看出,现在的两个线程对象是交错运行的,哪个线程对象抢到了 CPU...资源,哪个线程就可以运行,所以程序每次的运行结果肯定是不一样的,在线程启动虽然调用的是 start() 方法,但实际上调用的却是 run() 方法定义的主体。...处于死亡状态的线程不具有继续运行的能力。       Java 的线程操作,所有的线程在运行前都会保持就绪状态,那么此时,哪个线程的优先级高,哪个线程就有可能会先被执行。

    25560
    领券