Java 事件队列。为什么一切都应该在 invokelater 方法中?

发布于 2024-11-03 09:39:13 字数 429 浏览 6 评论 0原文

在我正在阅读的书中,每个具有多线程的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仅一夜美梦 2024-11-10 09:39:13

主线程与 EDT 不同。如果添加 System.out.println(Thread.currentThread().getName() ,您将看到它在 main()main > 和 AWT-EventQueue-0Runnablerun() 方法中,

这里是 讨论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 out main within main() and AWT-EventQueue-0 when within the run() method of the Runnable.

Here is a discussion of the history of the single threaded rule in Swing that might help make things clearer.

似梦非梦 2024-11-10 09:39:13

桌面 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文