Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 第二个线程没有';在第一次完成之前,不要更新gui_Java_Multithreading_Swing - Fatal编程技术网

Java 第二个线程没有';在第一次完成之前,不要更新gui

Java 第二个线程没有';在第一次完成之前,不要更新gui,java,multithreading,swing,Java,Multithreading,Swing,我的程序需要一段时间才能启动,所以我想为它创建一个“加载”屏幕(只是一个立即出现的框架,以便用户知道它正在做什么)。这意味着帧或JOptoinPane可以立即在单独的线程中运行(请参阅下面的尝试)。延迟由线程.sleep(3000)在下面的代码中模拟 问题是JOptoinPane出现了,但在3秒延迟结束之前保持空白,此时它显示为正常。如果将其更改为其他帧,则会出现相同的行为。帧将加载,但在时间结束前为空 直到程序的其余部分加载才加载的加载屏幕没有多大帮助:D.我如何解决这个问题 import j

我的程序需要一段时间才能启动,所以我想为它创建一个“加载”屏幕(只是一个立即出现的框架,以便用户知道它正在做什么)。这意味着帧或JOptoinPane可以立即在单独的线程中运行(请参阅下面的尝试)。延迟由
线程.sleep(3000)
在下面的代码中模拟

问题是JOptoinPane出现了,但在3秒延迟结束之前保持空白,此时它显示为正常。如果将其更改为其他帧,则会出现相同的行为。帧将加载,但在时间结束前为空

直到程序的其余部分加载才加载的加载屏幕没有多大帮助:D.我如何解决这个问题

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class LoadingTry implements Runnable{

    private JFrame frame;

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LoadingTry window = new LoadingTry();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    Thread thread1 = new Thread () {
        public void run () {
            JOptionPane.showMessageDialog(null, "Intializing...");

        }
    };

    public LoadingTry() {
        thread1.start();

        initialize();
    }


    private void initialize() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {}
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void run() {}

}

我明白了。拆下以下部件:

EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LoadingTry window = new LoadingTry();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
将其更改为:

                try {
                    LoadingTry window = new LoadingTry();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
        });

你也可以用jframe替换JOptionPane,并拥有一个有效的静态启动屏幕

发明轮子总是很难第二次:第一个轮子对我来说太难了