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

当我按下一个按钮时,JFrame就会冻结

当您按下按钮导致JFrame冻结时,通常是因为按钮的事件处理程序中包含了耗时的操作,这些操作阻塞了事件分发线程(Event Dispatch Thread,EDT)。在Java Swing中,所有的UI更新和事件处理都应该在EDT中进行,而耗时的任务会阻塞EDT,导致界面无响应。

基础概念

  • 事件分发线程(EDT):负责处理Swing组件的事件和绘制工作。
  • 耗时操作:如网络请求、大量计算等,这些操作如果直接在EDT中执行,会阻塞UI更新。

解决方案

为了避免界面冻结,应该将耗时操作放在单独的线程中执行,常用的方法有:

  1. 使用SwingWorker SwingWorker 是一个用于在后台线程执行耗时任务并在完成后更新UI的类。
  2. 使用SwingWorker SwingWorker 是一个用于在后台线程执行耗时任务并在完成后更新UI的类。
  3. 使用ExecutorService 可以使用 ExecutorService 来管理线程池,并在单独的线程中执行任务。
  4. 使用ExecutorService 可以使用 ExecutorService 来管理线程池,并在单独的线程中执行任务。

应用场景

  • 后台数据处理:如文件读写、数据库查询等。
  • 网络请求:如HTTP调用、API响应处理等。
  • 复杂计算:如数据分析、图像处理等。

通过将耗时操作移至后台线程,可以确保UI保持响应,提升用户体验。

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

相关·内容

疯踏java知识点-进阶精讲篇

void setPrice(int price) { this.price = price; } } Scanner基本使用 文本扫描程序,可以获取基本类型数据和字符串数据 当我们需要从控制台或文件中读取输入时...下面介绍几个常用 的方法: next(): 读取并返回输入中的下一个字符串,遇到空格或换行符时停止读取。 nextInt(): 读取并返回输入中的下一个整数。...nextDouble(): 读取并返回输入中的下一个浮点数。 nextLine(): 读取一行输入,并返回该行的字符串,可以包含空格。...)设置位置 值为null 则窗体 位于屏幕中央 void setDefaultCloseOperation(int operation)设置窗口关闭默认操 作 3表示窗口关闭时退出应用程序...jf=new JFrame(); jf.setTitle("窗体中创建按钮"); jf.setSize(400,400); jf.setDefaultCloseOperation

19620

GUI组件添加、布局设置

注意:使用这个对象时,传递的数字越大,字体越大,数字越小,字体越小 窗口显示在最上面:   setAlwaysOnTop();方法,写true就是令窗口显示 最上面,false则反之: ?...设置之后窗口就会一直在其他窗口的上面显示 去除窗口边框:   setUndecorated();方法,写true就是除去窗口的边框, false则反之: ? 运行效果: ?...设置窗口对象的默认关闭方式: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 直接关闭虚拟机 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE...添加按钮:   使用JButton来new出一个按钮对象,像构建窗口一样使用setBounds把标签显示的位置坐标设置好,再使用窗口对象访问add();方法把按钮组件添加到窗口上: ?...卡片布局就是像卡片一样,一张张的卡片叠在一起,按下一步就会到下一个卡片界面

1.2K20
  • BoxLayout

    BoxLayout布局管理器,这种布局方式是在行或列中楞放组件.如果沿用水平方向排列组件,当组件的总宽度超出容器的宽度时,组件不会换行,而是继续沿同一行排列组件。...如果采用竖直方向排列组件的方式,当组件的总高度超出容器的高度时,组件也不会换列,而是沿同列继续排列组件。 这时需要改变容的大小才能看到所有的组件,即有些组件可能处于不可见状态。...BoxLayout 提供了如下一个简单的构造器,构造方法和常用方法如表12.21所示。...类构造方法和常用方法 方法声明 功能描述 BoxLayout(Container target, int axis) 创建基于 target 容器的 BoxLayout 布局管理器,该布局管理器里的组件按...(false); 13 jFrame.setLayout(boxLayout); 14 //3.往frame对象中添加两个按钮 15 jFrame.add

    6710

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

    Java Swing介绍 1.Swing是一个为java世纪的GUI工具包 2.Swing是JAVA基础类的一部分 3.Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表 4个器件...javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); } } 这个很简单 看看就懂了 下一个例子...想要实现一个用户登录框实例 相信我,看着很长 一步一步按着敲就知道是什么意思了。...new JButton(“登陆”); loginButton.setBounds(0, 100, 80, 25); //…… panel.add(loginButton); } } 好的好的,你如果能够按顺序看到这里我就很欣慰了...用于创建按钮类似实例中的“Login”。 嗯 虽然大部分菜鸟驿站的照抄大半,但有自己的理解和注入,所以原创吧原创吧。

    2.6K20

    【干货】20K以上的高薪Java必掌握的基础知识点(二)

    68、按异常在编译时是否被检测来分,异常可以分为两大类:受检异常与非受检异常 。 69、程序可以处理的异常对应的类是 Exception 及其子类。...83、虽然Java 在程序结束时自动关闭所有打开的流,但是当我们使用完流后,显式地关闭 任何打开的流仍是一个良好的习惯。...97、Java中JFrame类的 setTitle 方法是用来设置窗口的名字。 98、JFrame类创建的对象是一个窗口容器,它默认布局是 BorderLayout 布局。...108、Java中能够产生事件的对象都可以成为事件源 ,如文本框、按钮、键盘等。 109、Java中事件源发生事件时,监视器 就自动调用执行被类实现的某个接口方法。...110、当用户与GUI 交互,比如移动鼠标、按下鼠标键、单击Button 按钮、在文本框内输入文本、选择菜单项或者关闭窗口时,GUI 会接受到相应的事件 。

    1.5K71

    教你如何在 React 中逃离闭包陷阱 ...

    当你点击该组件中的 "完成" 按钮时,就会触发这个回调。如果你想在点击时提交表单数据。这也很简单:只需将 title 和 onClick 这两个 props 传递给它即可。...但是我们又遇到了新的问题:如果在输入框中输入内容,然后按下按钮,我们在 onClick 中打印的值是 undefined 。...下次按下按钮不会改变之前拍摄的照片中的任何内容。...每个闭包在创建时都是冻结的,当我们第一次调用 something 函数时,我们创建了一个值变量中包含 "first" 的闭包。然后,我们把它保存在 something 函数之外的一个对象中。...当我们下一次调用 something 函数时,我们将返回之前创建的闭包,而不是创建一个带有新闭包的新函数。这个闭包会与 "first" 变量永远冻结在一起。

    69440

    java swing一篇轻松学习(高考后可以自学)

    方法名称 概述 getContentPane() 返回此窗体的 contentPane 对象 getDefaultCloseOperation() 返回用户在此窗体上单击“关闭”按钮时执行的操作 setContentPane...(Container contentPane) 设置 contentPane 属性 setDefaultCloseOperation(int operation) 设置用户在此窗体上单击“关闭”按钮时默认执行的操作...设置按钮的默认图标 void setText(String text) 设置按鈕的文本 void setMargin(Insets m) 设置按钮边框和标签之间的空白 void setMnemonic...(int nmemonic) 设置按钮的键盘快捷键,所设置的快捷键在实际操作时需要结合 Alt 键进行实现 void setPressedIcon(Icon icon) 设置按下按钮时的图标 void...setSelectedIcon(Icon icon) 设置选择按鈕时的图标 void setRolloveiicon(Icon icon) 设置鼠标移动到按扭区域时的图标 void setDisabledIcon

    9.6K10

    设计3D标签为什么要有一个字符间隙tracking?为什么要重写getPrefferedSize()?画三遍的顺序有讲究

    看看下面这张图 原理 看看这图,可以看到哈哈有三种颜色:白色、黑色和灰色 实现的时候并不像PS那样,按几个按钮就O了 其实实际是画出3个“哈哈”,一种白色,一种黑色,一种灰色 然后想象一下...Color.black);//设置正文颜色 label.setFont(label.getFont().deriveFont(140f));//设置字体大小为140像素 JFrame...frame=new JFrame("title"); frame.getContentPane().add(label); frame.pack();//窗口自动调节大小...因为:当右阴影的偏移量过大时,右阴影可能就会跑到下一个字符所在的地方,这样看起来就很难看的 上图看看有字符间隙和没有字符间隙的区别 这个图的字符间隙是0,右阴影的偏移量right_x=60,right_y...=40 可以看到,前一个字的右阴影和下一个字都挤到了一起了 这张图的字符间隙为80,阴影的偏移量和上一个字一样 有了字符间隙,就可以避免前一个字的阴影和下一个字挤到了一起 所以字符间隙至少是

    80050

    12.6事件处理

    例如,在用户界面上有一个按钮,当用户将鼠标移动到按钮上并单击时,就触发了一个“按钮单击”事件,然后由该命令按钮中的代码来完成相应的操作。因此,事件处理技术是用户界面程序设计中一项重要的技术。...事件:当用户在界面上执行一个操作,如按下键盘、单击或移动鼠标对窗口中的组件进行交互时所发生的事情。事件可以由外部用户操作触发,如单击按钮、单击鼠标等。事件也可以由操作系统触发,如时钟计数器等。...一般情况下,ActionEvent使用情况是单击按钮、选择一个项目、文本框按下回车等;ItemEvent使用情况是具有多个选项的组件上,如JCheckBox、JComboBox等;WindowEvent...A.Window B.JLable C.Panel D.ScrollPane (5) 当单击按钮组件时,会触发的事件是( )。...4.编程题 (1) 在JFrame窗体中添加5个按钮,使用BorderLayout布局管理器使5个按钮分布在东西南北中,在缩放或扩大界面时,南和北按钮总是保持最佳高度。

    13210

    java swing图形化界面_javagui界面设计

    *包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等。 2....2.1 顶层容器 顶层容器属于窗口类组件,可以独立显示,一个图形界面至少需要一个窗口,例如: # 组件 描述 1 JFrame 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器...常用的简单的基本组件: # 组件 描述 1 JLabel 标签 2 JButton 按钮 3 JRadioButton 单选按钮 4 JCheckBox 复选框 5 JToggleButton 开关按钮...创建一个顶层容器(窗口) JFrame jf = new JFrame("测试窗口"); // 创建窗口 jf.setSize(250, 250);...// 把窗口位置设置到屏幕中心 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序

    1.7K50

    GridBagLayout 以及 GridBagConstraints 用法「建议收藏」

    如下向窗口中添加一个占两个单元格(两行一列)的按钮的例子: JFrame f=new JFrame(); GridBagLayout gridbag = new...例如:在一个很大的窗口(如300*300)中添加两个按钮(也可以是面板)(原始大小 40*30),默认的,你会发现两个按钮分别处于上下两个等大小的区域中,且只占用了一小部分,没有被按钮占用的区域就被称为额外区域...gridx=0,gridy=0时放在0行0列。 gridwidth,gridheight —— 用来设置组件所占的单位长度与高度,默认值皆为1。...weightx,weighty —— 用来设置窗口变大时,各组件跟着变大的比例。 当数字越大,表示组件能得到更多的空间,默认值皆为0。...GridBagLayout里的各种设置都必须通过GridBagConstraints,因此当我们将GridBagConstraints的参数都设置 好了之后,必须new一个GridBagConstraints

    1.6K30

    Excel 常用的九十九个技巧 Office 自学教程快速掌握办公技巧

    2、单元格内强制换行当单元格内容特别多时,就会显得特别宽,阅读很不方便,此时可以单击要换行的单元格,光标放到编辑栏中,单击要换行的位置,按 Alt+回车强制换行。...7、重复上一次输入在单元格中输入内容按回车键进入下一个单元格后,再按组合键【Ctrl+D】即可以快速的重复上一次输入的内容。...23、快速切换至另一个 Excel 窗口当我们需要查阅两个表格的文件内容时,可直接按组合键【Ctrl+Tab】键切换表格窗口。...70、带单位的数值求和选中列按 Ctrl+H 键,调出查找和替换窗口,在查找内容输入:百万替换为输入需要替换的单元格,点击【全部替换】按钮。...85、恢复输入错误的公式如果公式输入时错了,按 ESC 键就可以恢复到输入前的状态,也可以点编辑栏的取消按钮。

    7.2K21

    Java图形用户界面设计的布局管理器

    一、布局管理器的背景 Component中有一个方法 setBounds() 可以设置当前容器的位置和大小,但是我们需要明确一件事,如果我们手动的为组件设置位置和大小的话,就会造成程序的不通用性,例如:...在默认情况下, FlowLayout 布局管理器从左向右排列所有组件,遇到边界就会折回下一行重新开始。...当向使用 GridLayout 布局管理器的容器中添加组件时, 默认从左向右、 从上向下依次添加到每个网格中 。...BoxLayout 可以在垂直和 水平两个方向上摆放 GUI 组件, BoxLayout 提供了如下一个简单的构造器 方法名称1 方法名称 方法功能 BoxLayout(Container target..., int axis) 指定创建基于 target 容器的 BoxLayout 布局管理器,该布局管理器里的组件按 axis 方向排列。

    20810
    领券