2012-05-20 54 views
-1

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

您正在屏蔽带有sleep的UI线程,从本质上阻止它显示任何内容。

您应该为此使用计时器。请参阅How to Use Swing Timers和Swing Timer API文档。无论您想要多长时间,您都可以使用计时器进行隐藏/处置。您也可以使用该计时器来显示进度条或为加载程序页面设置动画。

+0

谢谢,这是正确的,我删除了睡眠,它现在运行良好。 –

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); 
      } 
     }); 
    } 
}