关于Swing GUI中的线程

阿维夫·科恩(Aviv Cohn)

我想确保我了解一些东西。请确认是否正确。

我声明一个线程,并在其中运行某些东西-从那时起,所有东西都将在该线程中运行,除非我明确创建一个新线程。无论代码通过多少类和方法,它都将保留在同一线程中。

例如,假设我有一个完全在一个自定义JFrame中运行的应用程序。如果希望整个应用程序在同一线程中运行,可以通过创建一个新线程,然后在该线程的run()方法中实例化新的JFrame来实现。

除非我明确创建一个新线程并在该新线程中运行某些东西,否则这是否可以确保整个应用程序将在创建JFrame的那个线程中运行?

这是一个普遍的问题,但让我第二秒钟专门谈论Swing:

如果我希望整个Swing应用程序都在EDT中运行(如果我错了请纠正我-这正是我大部分时间使用Swing所需要的),SwingUtilities.invokeLater()在该main方法中只需使用一次即可,如下所示:

public static void main(String[]args){
    SwingUtilities.invokeLater( new Runnable(){
         JFrame frame = new CustomJFrame(); // where the entire application runs.
    } );
}
m0skit0

我声明一个线程,并在其中运行某些东西-从那时起,所有东西都将在该线程中运行,除非我明确创建一个新线程。无论代码通过多少类和方法,它都将保留在同一线程中。

正确。实际上,即使您创建新线程,也永远不会更改当前线程执行流程。这个新线程将在您启动后的将来某个时间开始执行,但是其流程与创建它的线程无关。

哪个-如果我错了请纠正我-正是我大多数时候需要使用Swing

你错了。您不想在EDT中做所有事情。EDT中的任何数据获取和操作都会降低GUI的响应速度。举例来说,您想从数据库中获取大量数据。如果您在EDT中这样做,则GUI将冻结,并且直到您完成获取(并可能对其进行操作)之前,用户将无法与其进行交互。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运行 GUI 时关于线程的问题

来自分类Dev

关于Gui从后台线程访问的基本线程

来自分类Dev

关于Gui从后台线程访问的基本线程

来自分类Dev

关于新线程中的框

来自分类Dev

Swing GUI在JTextPane中附加彩色文本

来自分类Dev

关于并行POSIX线程

来自分类Dev

在线程中更改GUI

来自分类Dev

在线程中更改GUI

来自分类Dev

关于Python和C中的多线程的困惑

来自分类Dev

关于Direct2D绘图调用中的多线程

来自分类Dev

关于在C#中的事件调用中使用的线程

来自分类Dev

关于在Python中的某些线程之间共享变量

来自分类Dev

关于在C#中的事件调用中使用的线程

来自分类Dev

Java Swing线程问题

来自分类Dev

Swing GUI问题与BorderLayout

来自分类Dev

GUI框架JavaFX或Swing

来自分类Dev

Swing GUI未更新

来自分类Dev

Netbeans Swing GUI

来自分类Dev

Swing GUI 冻结

来自分类Dev

Swing中的JFrame窗口是否在各自的线程上运行?

来自分类Dev

使用线程在Swing(Java)中实现MVC范例

来自分类Dev

在Swing中的鼠标悬停事件上停止线程

来自分类Dev

混合线程中的Swing Worker使用情况

来自分类Dev

Swing repaint()在循环或线程中不起作用

来自分类Dev

如何知道两个线程何时在Swing中完成

来自分类Dev

使用线程在Swing(Java)中实现MVC范例

来自分类Dev

如何在Swing中制作此GUI布局

来自分类常见问题

如何在Java GUI swing中制作更多按钮

来自分类Dev

Mac OS X 10.9中的Java Swing GUI