Sam*_*ail 10 java concurrency swing multithreading event-dispatch-thread
我在某处看到,对于影响gui视觉效果的任何线程,它应该使用SwingUtilities.invokeAndWait/invokeLater在EDT中运行
对于一个基本的gui,是否有必要new SwingGUI().setVisible(true);使用invokeAndWait 放置类似于EDT的内容?只是为了展示?
这算数了吗?
对你的问题的简短回答是:是的,甚至打电话也setVisible应该在美国东部时间召开.要确定当前线程是否为EDT,您可以使用该EventQueue#isDispatchThread方法
一些参考链接:
编辑:在阅读我提供的链接后,似乎Oracle网站上的一些文章已经过时,因为他们仍然记录您可以在另一个线程上创建Swing组件.有一个stackoverflow问题,其中包含一些很好的答案和链接到博客文章和关于'新'政策的文章(几年前新的)
是的,如果您触摸 Swing 对象,则必须在 EDT 上进行。在大多数情况下,您已经在那里,但如果还没有,请使用这些SwingUtilities课程。原因是 Swing 类不是多线程的,因此如果在其他线程上访问它,可能会导致严重的问题。也可能是setVisible()在幕后做了很多事情来展示一些东西(比如重新布局)。最好保持安全。