-1

我正在尝试在 java 中制作加载程序屏幕。到目前为止,我已经成功地为我的程序制作了启动画面,启动画面工作正常。我使用相同的代码来创建加载程序,但是当我调用对象时,只有睡眠部分起作用,我的意思是屏幕上没有真正出现。

public class IL extends JWindow {
Image L=Toolkit.getDefaultToolkit().getImage("L.png");
ImageIcon LI=new ImageIcon(L);

public IL (){
try  
{  
setSize(LI.getIconWidth(),LI.getIconHeight());  
setLocationRelativeTo(null); 
show();  
Thread.sleep(10000);  
dispose();  
} 
4

2 回答 2

2

你用 that 阻塞了 UI 线程sleep,基本上阻止它显示任何东西。

您应该为此使用计时器。请参阅如何使用 Swing 计时器和 Swing TimerAPI 文档。无论您想要多少时间,您都可以使用计时器进行隐藏/处置。您还可以使用该计时器来显示进度条或为加载器页面设置动画。

于 2012-05-20T10:14:19.590 回答
1

由于我有一个方便的,一个完整的实现。

import java.awt.Image;
import java.awt.event.*;
import javax.swing.*;
import java.net.URL;
import javax.imageio.ImageIO;

public class Splash extends JWindow {

    public Splash(Image image, int millis){
        ImageIcon icon=new ImageIcon(image);
        add(new JLabel(icon));
        pack();
        setLocationRelativeTo(null);
        ActionListener hideAction = new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                dispose();
            }
        };
        Timer timer = new Timer(millis, hideAction);
        setVisible(true);
        timer.start();
    }

    public static void main(String[] args) throws Exception {
        final Image image = ImageIO.read(
            new URL("http://pscode.org/media/stromlo2.jpg"));
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Splash(image, 6000);
            }
        });
    }
}
于 2012-05-20T10:33:59.280 回答