首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java swing,main方法中的必要调用

java swing,main方法中的必要调用
EN

Stack Overflow用户
提问于 2013-08-25 19:23:44
回答 2查看 163关注 0票数 1

在准备考试时,我偶然发现了java图形中的一些我不太清楚的线条。因此,我开始浏览和检查一些其他程序,它们没有这些行。

示例:

代码语言:javascript
复制
public static void main(String[] args){
  SwingUtilities.invokeLater(new Runnable(){//unknown
  public void run(){                        //lines
  JPanel panel = new DrawingPanel();
  ...
}

现在我知道Runnable和run必须处理线程,但我不知道这两行代码为什么工作以及如何工作

EN

回答 2

Stack Overflow用户

发布于 2013-08-25 19:28:36

Swing对象只能从在闭环中运行的Swing线程访问,该线程处理重绘、GUI事件等。当您的应用程序启动时,它在普通线程(而不是Swing线程)中启动。看起来很奇怪的代码行使用SwingUtilities来执行DrawingPanel构造函数,可能还会在Swing线程中执行更多代码。

直接从主线程实例化第一个GUI框架的代码也可以在实践中工作,如果它真的是第一个被调用的方法(正如预期的那样)。然而,这是“根本错误的”方法,以后可能不会在不同的机器上工作,如果不同的调用等等。

票数 1
EN

Stack Overflow用户

发布于 2013-08-25 19:31:40

Swing是一个单线程框架。与UI的所有交互和更新都应在事件分派线程的上下文中执行。

Java不保证main是在EDT中执行的(我相信他们通常把它叫做主线程)。因此,您需要确保您的任何UI代码都先同步到事件调度线程。

SwingUtilities.invokeLaterEventQueue.invokeLater的代表。这基本上是将Runnable实例发送到事件队列中,该队列由事件分派线程处理。

在将来的某个时候,将从队列中弹出Runnable,并在EDT中执行run方法

有关详细信息,请参阅Initial Threads

您还可以查看The Single Thread Rule in SwingEvent-Dispatching Thread Rules for Swing UIs获取更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18428471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档