在主程序加载大量数据期间,我在显示加载程序时遇到了问题。下面有一个名为SplashScreen的类,它显示加载器的 .gif 动画。
公共类 SplashScreen 扩展 JWindow {
public SplashScreen() {
super();
Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/resources/load.gif"));
try {
if (image != null) {
JLabel imageLabel = new JLabel();
imageLabel.setIcon(new ImageIcon(image));
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(imageLabel, BorderLayout.CENTER);
this.pack();
Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
Dimension labelSize = imageLabel.getPreferredSize();
setLocation(screenSize.width / 2 - (labelSize.width / 2),
screenSize.height / 2 - (labelSize.height / 2));
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
dispose();
}
});
addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
dispose();
}
});
}
} catch (Exception ex) {
}
}
运行这段代码的结果是:
但是当我想加载大量数据(比如 100 万条记录)时,我有这样的东西:
我使用 Thread、EventQueue.invokeLater 和 SwingUtilities 在单独的线程中显示 SplashScreen,但它不起作用。当我加载大量数据时,它总是空白。不幸的是,我必须说使用 EventQueue 或 SwingUtilities 非常困难,因为您无法结束由这些实用程序启动的任务。