Java 事件队列。为什么一切都应该在 invokelater 方法中?
在我正在阅读的书中,每个具有多线程的 GUI 示例都有类似的内容:(
public static void main(String[] args) throws Exception
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new SomeKindOfFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
我的意思是 EventQueue)。但代码不是在主(EDT)线程中自动执行吗?
in the book that i'm reading, every example of GUI with multithreading has something like that:
public static void main(String[] args) throws Exception
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new SomeKindOfFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
(i mean EventQueue). but isn't the code automatically executed in the main (EDT) thread?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
主线程与 EDT 不同。如果添加
System.out.println(Thread.currentThread().getName()
,您将看到它在main()
main > 和AWT-EventQueue-0
在Runnable
的run()
方法中,这里是 讨论Swing 中单线程规则的历史可能有助于使事情变得更清晰。
The main thread isn't the same as the EDT. If you add
System.out.println(Thread.currentThread().getName()
you'll see it print outmain
withinmain()
andAWT-EventQueue-0
when within therun()
method of theRunnable
.Here is a discussion of the history of the single threaded rule in Swing that might help make things clearer.
桌面 GUI 应用程序通常以这种方式工作。有一个线程用于 gui,一个或多个线程用于其余应用程序。使用
EventQueue
您可以指定GUI线程应该从其他线程执行什么操作。Desktop GUI applications usually work in this way. There is one thread for gui and one or several threads for rest of application. Using
EventQueue
you specify what GUI thread should do from other threads.