启动画面图片不会出现

时间:2013-02-18 05:47:50

标签: java image swing splash-screen

在我的程序中,我想用启动画面启动它几秒钟,然后启动程序的第一帧......

但有两个问题。

首先出现启动画面但是应该显示在其中的照片不会出现

第二次飞溅结束时,第一帧开始,但没有。

这是我的代码......所以我需要知道这是什么问题?

public class Splash extends JWindow {

    AbsoluteLayout absoluto;
    AbsoluteConstraints absimage,absrra;
    ImageIcon Image;
    JLabel jlabel;
    JProgressBar Barra;
    public Splash(){
         absoluto=new AbsoluteLayout();
         absimage = new AbsoluteConstraints(0,0);
         absrra = new AbsoluteConstraints(0,410);
         jlabel=new JLabel();
         Image=new ImageIcon("sales.png");
         jlabel.setIcon(Image);
         Barra=new JProgressBar();
         Barra.setPreferredSize(new Dimension(410,10));
         this.getContentPane().setLayout(absoluto);
         this.getContentPane().add(jlabel,absimage);
         this.getContentPane().add(Barra,absrra);
         new  Thread(){
             public void run(){
                 int i=0;
                 while(i<101){
                     Barra.setValue(i);
                     i++;
                     try {
                         sleep(30);
                     } catch (InterruptedException ex) {
                       //  Logger.getLogger(Splash.class.getName()).log(Level.SEVERE,null,ex);
                     }
                 }
                 System.exit(0);
             }
         }.start();
         this.pack();
         this.setLocationRelativeTo(null);
         this.setVisible(true);
    }

    public static void main (String args[]) throws SQLException, ClassNotFoundException{
        new Splash();
        loginForm a =new loginForm();
        a.setTitle("fram 1");
        a.setSize(700,600);
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        a.setLocationRelativeTo(null);
        a.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:2)

如果不知道更多,我会说你有各种各样的问题......

首先,这......

Image=new ImageIcon("sales.png");

ImageIcon(String)需要一个文件(来自本地磁盘),这里你说的是图像必须存在于执行程序的同一目录中。如果图像是嵌入式资源,您将遇到麻烦。您需要提供URL

其次,我不知道AbsoluteLayout是什么,但我怀疑这是一种方便的方式来说setLayout(null)并且没有证据证明这一点,我会怀疑你没有提供标签的任何宽度/高度信息,意味着它将为0x0。

您可以查看this,了解使用JLabel作为其他组件的支持容器的示例。

您还通过更新EDT的进度条来违反Swing的单线程规则。这是一个很大的,不,不。你实际上更善于使用SwingWorker

有关详细信息,请查看Concurrency in Swing

以下几个相同问题的不同例子。

回答你问题的第二部分......

我会仔细看看System.exit(0); ...