java中的加载程序屏幕未出现在屏幕上

时间:2012-05-20 10:04:36

标签: java swing awt

我正在尝试在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();  
} 

2 个答案:

答案 0 :(得分:2)

您正在使用sleep阻止UI线程,从根本上阻止它显示任何内容。

你应该使用计时器。请参阅How to Use Swing Timers和Swing Timer API文档。您可以使用计时器在您需要的时间之后进行隐藏/处置。您还可以使用该计时器显示进度条或为加载页面设置动画。

答案 1 :(得分: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);
            }
        });
    }
}