2013-02-18 3 views
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); 
    } 
} 
+0

Вы могли бы начните с просмотра [этого] (http://stackoverflow.com/questions/14915022/why-wont-this-draw-the-image/14915370#14915370) и [этого] (http: // stackove rflow.com/questions/14802662/splash-screen-progress-bar-not-drawing/14803941#14803941) для нескольких примеров – MadProgrammer

ответ

2

Не зная больше, я бы сказал, у Вас есть сочетание проблем ...

Во-первых, это ...

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

ImageIcon(String) ожидает файл (с локального диска), здесь вы говорите, что изображение должно существовать в том же каталоге, из которого была выполнена программа. Если изображение является встроенным ресурсом, у вас будут проблемы. Вместо этого вам необходимо будет поставить URL.

Во-вторых, я понятия не имею, что такое AbsoluteLayout, но я подозреваю, что это удобный способ сказать setLayout(null) и без каких-либо доказательств для участия в соревнованиях, я бы предположил, что вы не предоставляете информацию о ширине и высоте для label, то есть он будет 0x0.

Вы можете взглянуть на this на пример использования JLabel в качестве поддерживающего контейнера для других компонентов.

Вы также нарушаете правило единственной нити Swing, обновляя индикатор прогресса на стороне EDT. Это большой, нет, нет. На самом деле вам лучше использовать SwingWorker.

Для получения дополнительной информации см. Concurrency in Swing.

Следующие несколько примеров одной и той же проблемы.

В ответ на ваш второй части вопроса ...

я бы долго пристально смотреть на System.exit(0); ...

Смежные вопросы