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

构建Swing/AWT小部件不是在Event Dispatch Thread上安全吗?

构建Swing/AWT小部件是否在Event Dispatch Thread上安全,主要取决于小部件本身的设计和实现,而不是简单地依赖于线程。

在Swing中,小部件是GUI组件,它们被设计为在Event Dispatch Thread(EDT)上运行,这是因为EDT是Swing的事件分发线程。如果小部件在EDT上运行,那么它可以处理与GUI相关的事件,例如按钮点击、列表滚动、菜单点击等。

然而,并不是所有的小部件都可以在EDT上运行。一些复杂的小部件,如JavaFX、WebView、OpenGL等,需要在其他线程上运行,因为它们需要处理一些耗时的工作,例如网络请求、图形处理等。

如果小部件在非EDT线程上运行,那么它需要确保在更新GUI时不会引起事件,以避免阻塞EDT。例如,JavaFX小部件使用JavaFX线程来处理耗时任务,并在完成任务后通知EDT更新GUI。

总的来说,构建Swing/AWT小部件是否在Event Dispatch Thread上安全,取决于小部件的设计和实现。如果小部件被设计为在EDT上运行,那么它可以处理与GUI相关的事件,并在更新GUI时不会阻塞EDT。如果小部件需要在其他线程上运行,那么它需要确保在更新GUI时不会引起事件,以避免阻塞EDT。

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

相关·内容

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

Swing是线程不安全的,这就是说,大多数情况下,只能从事件派发线程中访问Swing组件。...实际,这就是说应用程序和应用程序必须把组件添加到内容窗格中而不是把它们直接添加到应用程序或应用程序(或根窗格)中。而且,我们不应该直接为Swing应用程序或应用程序设置布局管理器。...例2-1 一个Swing应用程序    import javax.swing.*;  import java.awt.*;  import java.awt.event.*;    public class...例2-8 重量组件下面显示的轻量弹出式菜单    import javax.swing.*;  import java.awt.*;  import java.awt.event.*;    public...is okay because the getValue's run()      // is invoked on the event dispatch thread      value = (int

2.5K20
  • Swing 的任务线程与 EDT 事件分发队列模型

    1 现象及问题 Swing程序中,经常能看到如下这种代码: ? 为何用invokeLater,而不直接调用呢? 大多数Swing的API非线程安全,不能在任意地方调用,应该只EDT中调用。...初始化线程(即禁止main方法中直接创建Frame,初始化线程中应使用invokeLater初始化GUI) 任务线程同Swing组件或其缺省数据模型进行的交互 都是非线程安全性操作。...任何与GUI无关的处理不要由EDT执行,尤其是I/O耗时操作 7 Swing不是一个“安全线程”的API,为什么要这样设计 Swing的线程安全不是靠自身组件的API来保障,虽然repaint方法是这样...一般用于取得Swing组件的数据。 8.2 SwingUtilities. invokeLater(runnable) 使 doRun.run() AWT事件分法线程异步执行。...请注意,如果doRun.run 引发未捕获的异常,则事件分发线程将展开(而不是当前线程)。 从1.3版本开始,此方法只是java.awt.EventQueue.invokeLater()的封面。

    99521

    23 Java 图形化编程

    而本章介绍的Java图形用户界面技术是基于Java SE 的 Swing,事实它们实际应用中使用不多,因此本章的内容只做了解。...AWT是Applet和Swing技术的基础。 AWT实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序不同的操作系统平台下运行所看到的样式不同的。...Applet Applet称为Java应用程序,Applet基础是AWT,但它主要嵌入到HTML代码中,由浏览器加载和运行,由于存在安全隐患和运行速度慢等问题,已经很少使用了。...图所示是Swing容器类层次结构,Swing容器类主要有:JWindow、JFrame和JDialog,其他的不带“J”开头都是AWT提供的类,Swing中大部分类都是以“J”开头。...事件处理的过程中涉及三个要素: 事件:是用户对界面的操作,Java中事件被封装称为事件类 java.awt.AWTEvent 及其子类,例如按钮单击事件类是 java.awt.event.ActionEvent

    2.6K20

    曾经是“杀手级”桌面语言,Java桌面开发为何走向衰落?

    虽然标签号称可以“多浏览器”环境下正常嵌入程序,但 IE 实际使用的却是标签,而 Mozilla 使用的则是标签。...不止如此,程序还大大败坏了 Java 的名声,其中很多安全漏洞都被宣传成“Java 漏洞”。...这就给人留下一种错误印象,即任何用 Java 编写的东西都是潜在的安全威胁——虽然实际这些“漏洞”只是程序自己的问题。...SWT 的优势在于无需自行绘制小部件,而仅仅是为了平台的本机小部件提供绑定,因此由它构建的应用程序观感上原生度更高、响应速度也更快。但经历过 AWT 的糟糕体验,我仍然保持着警惕。...Swing/AWT 曾经是、现在也仍然是 Java 中内置的唯一工具包,能够确保开发者无需任何第三方依赖项、单凭 Java 运行时环境就构建起完整的 GUI 应用程序。

    1.6K20

    Java实现时间动态显示方法汇总

    大家好,又见面了,我是全栈君 这篇文章主要介绍了Java实现时间动态显示方法汇总,很实用的功能,需要的朋友可以参考下 本文所述实例可以实现Java界面上动态的显示时间。...thread1=new Thread(df2); thread1.start(); } } /* hwq2.com */ 比较: 个人倾向于方法一,因为Timer是可以被多个TimerTask...jFrame.setDefaultCloseOperation(); // 给关闭按钮增加特定行为 jFrame.setLocationRelativeTo(null); // 让Frame一出来就在屏幕中间,而不是左上方...代码如下: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener...但是考虑到TimerTask执行的时间太短,才1秒钟,以肉眼观察,基本是和立刻更新没区别。如果TimerTask执行时间长的话,这里就要立刻重新用心的时间更新一下displayArea。

    1.7K10

    Java游戏编程不完全详解-3(爆肝一万七千字)

    注意:Window类的setFocusTraversalKeysEnabled(false)方法是让按键聚焦转换键事件,转换键可以修改当前按键的焦点,然后可以让焦点移到另外的组件中去。...但是,封装之前,我们先要说明前面的代码的缺陷。 首先,我们应该注意到synchronized修饰的方法。记住:所有的事件都是从AWT事件分发线程中产生的,该线程不是主线程!...实际,我们使用JFrame对象来操作Windw和Frame而已。 一些Swing组件使用自己的组件来呈现画面,所以,我们可以自己的呈现循环中使用Swing组件。...Swing有大量的API可以使用,而这里讲解的是游戏,不是Swing组件,所以不会讨论Swing的组件功能。...**注意:**因为Swing组件是非线程安全的,所以当一个Swing组件可见时,我们不可能在AWT事件分发线程中修改它的状态。

    2.1K10

    java课设选题_基于javaweb的课程设计

    第二个界面是搜索结果界面:需要的是一个再次搜索框,用文本字段;一个再次搜索按钮,用button;一个面板JPanel,用来盛放我搜索到的结果;界面的最底下还有三个按钮,一个文本框,分别是:一页,下一页...(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent...java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent...; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URI; import...6.git提交记录 7.我的感想 我本身的代码基础不是很扎实,所以课设中很多部分都无法完成,只能实现Gui界面的设计与部分代码的编写。

    89510

    【移动架构】Flutter vs React Native:最后一句话。

    一个是AWT,它是一种为多个操作系统构建UI的方法,同时仍然保持操作系统的外观。 每个操作系统都有自己的组件,这些组件映射回使用AWT框架创建的AWT组件。...Java随后决定开发自己的渲染组件库SwingSwing所做的是处理自己的渲染 依赖底层操作系统组件的风险。Swing得了这场战斗,不久AWT就从地球消失了。 这有什么关系?我为什么要离题?...如果我们回顾一下SwingAWT之战作为参考,那么Flutter 可能会在这里获胜。...第一轮:Flutter 我又离题了,但传统基于操作系统的开发是基于小部件的,而基于浏览器的开发依赖于模板和DSL。...它比以往任何时候都更有意义保持你的技术堆栈精简,而不是分散不同的技术。 第二轮:React Native 那么移动和网络的通用代码库呢? 啊哈,圣杯。有两种方式来看待这个问题。

    3.5K20

    Java---实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)

    说明: 因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个程序,直接进入文件对话框选择需要运行的class文件。 只需要提前输入完整的类名。...注意:加的MyTest必须打个包,加上: import cn.hncu.myJuniitApp.vo.MyTest; 不然不是同一个注解呢。...; import java.awt.Toolkit; import java.io.File; import javax.swing.JFileChooser; import javax.swing.JOptionPane...() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnRunActionPerformed...这个写得更加规范,特别是以后到公司工作,基本都是几个人开发同一个项目的,这个人写这里的,那个人写那里的,如果没有规范,怎么行呢。怎么合作开发同一个项目呢。 所以,分包是必须的。

    36810
    领券