`
marlonyao
  • 浏览: 252963 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

模式对话框为什么不会让界面失去响应?

    博客分类:
  • java
阅读更多
我很早就有这个疑问了,但一直懒得去弄清楚,直到最近又要开始写桌面程序才下决定要弄清楚。我们都知道在swing(或者wxpython)中使用事件处理使用单线程模型,即所有的事件处理、界面更新操作都是在必须在同一个线程中执行,这个线程又称为事件分发线程(Event Dispatcher Thread)。这样做的好处就是避免大量线程同步的开销,缺点是不能在事件线程中处理耗时操作,这会阻塞用户鼠标键盘操作,给用户的感觉就是界面失去响应,这给用户的感觉很不好。但是,我们却经常在事件线程中弹出模式对话框,我们都知道模式对话框是阻塞的,因此它应该也会阻塞事件线程,从而导致用户界面不响应,但事实是对话框仍可响应用户的鼠标键盘事件,这是为什么呢?

在网上找了很久才到这里找到答案。原因是当调用对话框的showModal()方法时,对话框并不是干等着(就像Thread.sleep())那样,而是创建了一个新的事件队列来处理用户的鼠标键盘事件,用户界面当然就不会失去响应了。

P.S. 后来又发现一篇讲得比较透彻的文章,见这里

[完]
分享到:
评论

相关推荐

    模式对话框和非模式对话框消息响应

    ### 模式对话框与非模式对话框的消息响应机制 #### 概述 在Windows编程中,对话框是用户界面的重要组成部分,它们用于提供输入、显示数据或进行其他交互操作。对话框分为两种类型:模式对话框(Modal Dialog)和非...

    可自动停靠隐藏的对话框.zip_对话框 尺寸_隐藏 对话框

    自动停靠和隐藏对话框的特性在聊天界面中非常实用,它们可以让用户在保持与多个联系人交流的同时,专注于当前的对话,或者在需要时快速切换到其他窗口或任务,而不会被过多的窗口遮挡视线。 实现这样的功能,开发者...

    socket通信,对话框显示接受情况

    这种方式简单易懂,但可能导致程序在等待数据时失去响应。 相比之下,异步Socket通信使用了Windows的消息机制。在异步模式下,`Send`和`Receive`操作不会立即返回结果,而是通过触发消息或事件来通知应用程序数据已...

    FramelessDialog.rar

    在IT领域,特别是软件开发中,`FramelessDialog.rar` 提到的核心概念是无边框对话框(Frameless Dialog)的实现,这是GUI(图形用户界面)设计的一部分。无边框对话框通常用于创建自定义的窗口外观,使得应用程序...

    傲游浏览器3(Maxthon) 3.1.8.1000 正式版

    * 解决同时按下 Alt + Ctrl + ESC 时, 浏览器失去响应的问题. * 重置所有选项后, 快速保存图片的路径会消失. * 已锁定的标签会干扰关闭全部标签的动作, 使其左侧的标签无法被关闭. * 调整侧边栏大小会使侧边栏失去...

    C#控件大全

    (6)ShowDialog方法:该方法的作用是将窗体显示为模式对话框。其调用格式为: 窗体名.ShowDialog(); 3.常用事件 (1)Load事件:该事件在窗体加载到内存时发生,即在第一次显示窗体前发生。 (2)Activated...

    java实验报告编程资料

    通过以上分析,我们可以看到这份实验报告主要聚焦于Java GUI编程的基础知识,特别是如何使用AWT和Swing来创建简单的图形用户界面,并通过事件处理来响应用户的交互。这对于初学者来说是非常实用的学习材料。

    2021-2022计算机二级等级考试试题及答案No.5559.docx

    17. Visual Basic对话框:设置通用对话框为“另存为”对话框,需调用`ShowSave`方法。 18. Visual FoxPro界面:启动时会出现主窗口和命令窗口。 19. 文本框属性:若要使文本框的初始值为空,需更改`Text`属性。 ...

    windows api 常量 消息常量 查询 txt

    WM_MDIACTIVATE(0x0222)在多文档界面(MDI)应用程序中,当子窗口获得或失去激活状态时发送,用于更新应用程序的状态或界面。 ### WM_MDIDESTROY (MDI销毁) WM_MDIDESTROY(0x0221)在MDI子窗口被销毁前发送,...

    swing控件及事件

    在这个学生管理系统中,Swing控件被用来构建交互式的界面,而事件处理机制则确保了用户操作的有效响应。 Swing是Java Foundation Classes (JFC)的一部分,提供了丰富的组件集合,用于创建美观且功能强大的图形用户...

    VB控件文本框属性详解.pdf

    12. Enabled 属性:用于设定是否对事件产生响应,取值为:True 可用、False 不可用,在执行程序时,该对象用灰色显示,并且不响应任何事件。 13. Font 属性:字型,可从弹出的对话框选择字体、大小和风格。 14. ...

    Foobar2000.AERO效果播放器

    4、进入 参数设置-显示-分栏界面,右侧选择 主要-FCL导入和导出-导入,在弹出的导入窗口中找到EIKO_v*.fcl文件,在“选择要导入的设置”对话框中,按需求选择你的设置,如果你没有什么要保留的分栏界面设置或者不...

    activity 生命周期 demo

    - onPause():当Activity即将失去焦点,但仍然可见(如启动新的Activity或弹出对话框)时调用,适合保存临时数据。 - onStop():Activity完全不可见,可能被其他Activity覆盖或设备屏幕熄灭。 - onDestroy():...

    Winform 无边框窗体

    在Windows Forms(Winform)开发中,创建一个无边框窗体可以实现自定义界面的效果,比如模拟对话框、窗口拖动或者实现全屏模式。本文将深入探讨如何在Winform应用中创建无边框窗体,并介绍相关知识点。 首先,我们...

    android常见的面试题

    为什么要用ContentProvider?它和sql的实现上有什么差别? **ContentProvider** 的主要目的是提供一个标准的接口来访问数据,使得其他应用可以方便地使用这些数据。它和SQLite数据库的主要区别在于: - **...

    android面试题整理

    如果B是透明或对话框样式,A不会调用onStop()。 横竖屏切换时,Activity的生命周期处理取决于清单文件中android:configChanges的设置。如果不设置,切屏会导致Activity销毁并重新创建;如果设置为"orientation|...

    VB控件大全属性详解___月视图

    定义控件文本的字体、大小和风格,可从对话框中选择,影响界面的可读性和美观度。 #### 前景色 (ForeColor) 设置控件前景色,即文本和某些元素的颜色,可从调色板选择。 #### 高度 (Height) 控件的高度,单位通常...

Global site tag (gtag.js) - Google Analytics