0

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

但是有2个问题。

首先出现启动画面,但本应在其中显示的照片没有出现

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

这是我的代码.....所以我需要知道问题出在哪里?

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

1 回答 1

2

在不了解更多信息的情况下,我会说您遇到了一系列问题...

首先,这...

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

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

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

您可以看一下这个示例,以了解使用JLabel其他组件作为后备容器的示例。

您还通过更新 EDT 外部的进度条违反了 Swing 的单线程规则。这是一个很大的,不,不。实际上,您最好使用SwingWorker.

有关更多详细信息,请查看Swing 中的并发。

以下是同一问题的几个不同示例。

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

我会仔细研究很久System.exit(0);...

于 2013-02-18T06:10:07.657 回答