有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java事件队列。调用器与线程。开始

对于Swing应用程序,我们使用EventQueue.invokeLater()有什么原因吗?不应该以同样的方式工作吗

线程的另一个优点。首先,我们可以告诉线程中断,因为EventQueue.invokeLater没有为我们提供Thread对象


共 (1) 个答案

  1. # 1 楼答案

    启动Swing应用程序的两个选项是:

    EventQueue.invokeLater()
    

    SwingUtilities.invokeLater()
    

    我更喜欢使用SwingUtilities。他们都把runnable放在了Event Dispatch thread(EDT)上。你不需要EDT的手柄

    您的代码要么在EDT上,要么调用invokeLater()方法会将runnable放在EDT上。你可以用SwingGutilities确定任何一种情况。isEventDispatchThread()方法调用

    线。start()方法适用于您自己的工作线程。或者,如果愿意,您可以为自己的Swing worker线程使用javax.swing.SwingWorker

    这是我用来启动我编写的每个Swing应用程序的样板文件

    package com.ggl.game2048;
    
    import javax.swing.SwingUtilities;
    
    import com.ggl.game2048.model.Game2048Model;
    import com.ggl.game2048.view.Game2048Frame;
    
    public class Game2048 implements Runnable {
    
        @Override
        public void run() {
            new Game2048Frame(new Game2048Model());
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Game2048());
        }
    
    }
    

    简明扼要。这门课做三件事

    1. 将Swing应用程序置于EDT上
    2. 实例化Swing应用程序模型
    3. 实例化Swing应用程序JFrame

    您可以在我的Java文章中看到2048 Swing application的其余部分