当前位置: 首页 > 面试题库 >

我如何知道我是否在事件分发线程上?

司徒炎彬
2023-03-14
问题内容

1.考虑我的代码在我拥有的JPanel的某行上,我是否自动在EDT上运行?

2.对于不属于GUI,JPanels或其他视图类的其他所有类的相同问题,简单逻辑类。

3.如果我有正在播放音乐的JPanel,则音乐应该在事件分发线程或非EDT的其他线程上运行(因为没有阻塞GUI,尽管我感觉运行没有问题) (来自EDT)?

注意:我想要一个一般规则,而无需使用“ SwingUtilities.isEventDispatchThread()
谢谢”


问题答案:
  1. 没有。
  2. 没有。
  3. 背景线程。

如果在EDT外部运行的代码调用GUI类中定义的方法,则该代码不会在EDT上运行,而是在调用线程中运行。

如果在EDT中运行的代码调用了非GUI类中定义的代码,则该代码将在EDT上运行。

规则是,如果您不创建其他线程,则正在调用的方法将在运行调用代码的线程上运行–线程与定义方法的类不对应。

在EDT上运行的方法是 事件侦听器 ,它们是由Swing而不是您调用的。(不过,如果您是从EDT打电话给他们,它们可能仍然是。)

同样,Runnable.run()传递给SwingUtilities.invokeLater()和的方法内的任何代码invokeAndWait()也可以在EDT上运行。

您从EDT调用的任何常规方法都将在EDT上运行。

Thread您创建的代码中调用的任何代码(无论是直接使用线程,还是直接使用ExecutorService,或SwingWorker.doInBackground()
都不 在EDT上。您程序的main()方法 也不 在EDT上。



 类似资料:
  • (我已经删除了上一个,所以我想你可以在编辑中找到它) 编辑 所以按照bad_coder在评论中告诉的以及他分享的链接中的大多数答案,我点击了“选项显示所有”,我得到了这个 1) 这里唯一有意义的是点击“”按钮,所以我点击了它 2) 现在我应该用路径替换突出显示的部分(换句话说,我在cmd中键入“where python”后得到的路径) 3) 这就是我发现的。那么我应该在突出显示的部分复制并粘贴哪一

  • 问题内容: 当使用* nix外壳程序(通常是bash)时,我经常产生一个子外壳程序,可以用它处理一个小任务(通常在另一个目录中),然后退出该外壳程序以继续父外壳程序的会话。 偶尔,我会失去对运行嵌套shell还是在顶层shell中的跟踪,并且会不小心产生其他的子shell或错误地退出顶层shell。 。 有没有一种简单的方法可以确定我是否在嵌套shell中运行?还是我以完全错误的方式解决问题(通过

  • 在Android上有没有办法知道,如果运行我的代码的线程,是UI线程还是不是?在swing中,有来告诉我是否在UI线程上。安卓SDK里有什么功能让我知道这一点吗?

  • 我有一本安装了Android Studio的 Macbook。由于我有使用格拉德的项目(而Android Studio也使用格拉德),我会假设我在机器的某个地方安装了格拉德。但是,如果我在终端中键入,我得到。那么,我是因为我有Android Studio而自动安装了渐变,还是必须运行? 我知道这是一个糟糕/愚蠢的问题,但我只想确保我不会安装 Gradle 两次。

  • 问题内容: 每次我运行使用Flask-SQLAlchemy的应用程序时,都会收到以下警告,提示该SQLALCHEMY_TRACK_MODIFICATIONS选项将被禁用。 我试图找出此选项的作用,但是Flask-SQLAlchemy文档尚不清楚该跟踪的用途。 · 如果设置为True(默认值),Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。

  • 问题内容: 我想知道我是否在通话。 如果我正在通话,请启动服务(服务部分已清除)。我该怎么做呢? 参加通话时,我需要致电服务中心…我不知道该怎么做?有什么帮助吗? 问题答案: 您需要广播接收器… 在清单中声明广播接收器… 还声明使用权限… 广播接收器类… 还有一类可自定义电话状态侦听器…