我的程序需要一段时间才能启动,因此我想为它创建一个“加载”屏幕(只是一个立即显示的框架,以便用户知道它正在做某事)。这意味着一个框架或JOptoinPane可以立即在一个单独的线程中运行(参见下面的尝试)。延迟在下面的代码中由Thread.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() {}
}
答案 0 :(得分:0)
想出来。删除部分内容:
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并使用有效的静态初始屏幕