0

私のプログラムでは、スプラッシュ画面で数秒間開始してから、プログラムの最初のフレームを開始したいと考えています...

しかし、2つの問題があります。

最初にスプラッシュ スクリーンが表示されますが、表示されるはずだった写真が表示されません。

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の同時実行性を参照してください。

同じ問題の次のいくつかの異なる例。

質問の2番目の部分に答えて...

私は長い間一生懸命見ていきSystem.exit(0);ます...

于 2013-02-18T06:10:07.657 に答える