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