You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swing应用中指定代码行的必要性?是否仅用于显示主窗口?

在Swing应用中,这两行代码的必要性解析

首先先把你贴的代码放出来方便参考:

public class MedicalCenter { 
    public static void main(String[] args) { 
        java.awt.EventQueue.invokeLater(() -> { 
            new Login().setVisible(true); // <----------
            new TimeAndDate().setVisible(true); // <----------
        }); 
    } 
}

咱们分两部分来拆解这几行代码的作用和必要性:

一、为什么要把这两行放在EventQueue.invokeLater()里?

这是Swing开发的强制规范,不是可选的。Swing采用单线程模型:所有和UI相关的操作(创建组件、修改组件状态、显示窗口等)都必须在**事件调度线程(EDT)**上执行。

如果直接在main线程(主线程)里创建并显示Swing窗口,可能会导致UI渲染异常、卡顿,甚至出现线程安全问题(比如组件状态被多个线程同时修改)。invokeLater()的作用就是把传入的Runnable任务放到EDT的任务队列里,确保这些UI操作在正确的线程上执行,避免上述问题。

二、那两行setVisible(true)的必要性是什么?

这两行的作用很直接:

  • new Login().setVisible(true):创建Login窗口的实例,并将其设置为可见状态,也就是把登录窗口显示出来。
  • new TimeAndDate().setVisible(true):同理,创建并显示TimeAndDate窗口。

它们的必要性完全取决于你的应用需求:

  • 如果你的应用启动时需要同时展示登录窗口和时间日期窗口,那这两行都是必要的;
  • 如果你的应用只需要一个主窗口(比如只需要登录窗口),那另一行就可以删掉;
  • 而且它们不仅仅是“启动显示主窗口”——这里创建了两个独立的顶层窗口(假设Login和TimeAndDate是继承自JFrame或JDialog的类),所以是分别显示两个不同的窗口,而非单一主窗口。

额外提一句:通常来说,桌面应用不会一启动就弹出两个独立窗口,更合理的逻辑可能是先显示登录窗口,用户登录成功后再打开时间日期窗口(或者把时间日期组件嵌入到主窗口里),这时候你就需要调整代码逻辑,而不是直接在启动时同时显示两个窗口。

内容的提问来源于stack exchange,提问作者Adomas Bazinys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:37:16