我想确保我了解一些东西。请确认是否正确。
我声明一个线程,并在其中运行某些东西-从那时起,所有东西都将在该线程中运行,除非我明确创建一个新线程。无论代码通过多少类和方法,它都将保留在同一线程中。
例如,假设我有一个完全在一个自定义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.
} );
}
我声明一个线程,并在其中运行某些东西-从那时起,所有东西都将在该线程中运行,除非我明确创建一个新线程。无论代码通过多少类和方法,它都将保留在同一线程中。
正确。实际上,即使您创建新线程,也永远不会更改当前线程执行流程。这个新线程将在您启动后的将来某个时间开始执行,但是其流程与创建它的线程无关。
哪个-如果我错了请纠正我-正是我大多数时候需要使用Swing
你错了。您不想在EDT中做所有事情。EDT中的任何数据获取和操作都会降低GUI的响应速度。举例来说,您想从数据库中获取大量数据。如果您在EDT中这样做,则GUI将冻结,并且直到您完成获取(并可能对其进行操作)之前,用户将无法与其进行交互。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句