[JAVA] Probleem met laden van ImageIcon.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Topicstarter
Voor een project met JAVA probeer ik een SplashScreen te maken welke ook gelijk als InfoScreen(About) gebruikt kan worden.

De SplashScreen werkt prima (plaatje wordt getoond etc.) echter als ik dezelfde class nog een keer aanroep opent het plaatje niet.
Via Google kon ik geen oplossing vinden, en ik heb ook geprobeerd allebei de schermen met een ander plaatje te laten openen.
Als eerste dacht ik natuurlijk dat het plaatje niet gevonden kon worden bij de 2e aanroep, maar dan zou er een melding gegeven moeten worden lijkt mij?

Het SplashScreen wordt gemaakt met de volgende code:
Java: SplashScreen.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
      * 
      * @param _showInfo
      * @param d
      * @param image
      */
     public SplashScreen(boolean _showInfo, int d, ImageIcon image) {
          imageIcon = image;
          iDuration = d;
          showInfo = _showInfo;
          setSplash();

     }

     /**
      * add all the components to the splash frame
      */
     public void setSplash() {
          setSize(482, 428);
          System.out.println("ello");
          JLabel lImagePanel = new JLabel(imageIcon);
          imagePanel.add(lImagePanel);

          add(imagePanel);
          setLocationRelativeTo(null);

          // Display it
          setVisible(true);

          if (!showInfo) {
               new ConnectSQLite("Kasboek.sqlite");

               new MainFrame(true, true);
          }
          // Wait a little while loading resources
          try {

               Thread.sleep(iDuration);
          } catch (Exception e) {
               e.printStackTrace();
          }

          // close the screen
          dispose();
     }

Aanroep gebeurt op de volgende manier:
Vanuit de main:
Java: SplashScreen.java
1
2
3
4
5
SplashScreen splash = new SplashScreen(
                    false,
                    2000,
                    new ImageIcon(Main.class
                              .getResource("/kb/view/images/splash.jpg")));

Vanuit het menu:

Java: SplashScreen.java
1
2
3
4
5
6
7
8
9
     if (e.getActionCommand().equals(
                    connectXML.getName("Info", ConnectXML.BUTTON_TYPE))) {

               // create the splashscreen
               SplashScreen splash = new SplashScreen(true, 3000, new ImageIcon(
                         this.getClass().getResource(
                                   "/kb/view/images/splash.jpg")));

          }


Weet iemand misschien waar dit aan ligt, want ik ben het een beetje kwijt 8)7

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • OrbitZ
  • Registratie: Juni 2001
  • Laatst online: 26-05 13:07
Krijg je bij de tweede aanroep van this.getClass().getResource(...) niet toevallig null terug?

Misschien is het een classloader issue?

Acties:
  • 0 Henk 'm!

  • OrbitZ
  • Registratie: Juni 2001
  • Laatst online: 26-05 13:07
Bij nader inzien ligt het volgens mij hier aan:

Java: SplashScreen.java
1
2
3
4
5
6
7
8
9
10
11
          // Wait a little while loading resources
          try {

               Thread.sleep(iDuration);
          } catch (Exception e) {
               e.printStackTrace();
          }

          // close the screen
          dispose();
     }


Vanuit je main gaat het goed omdat je dan niet in de UI thread zit, als je die code vanuit een menu handler aanroept zit je in de UI thread en hang je dus die thread op door de sleep.

Je kan beter een timer zetten en dan door middel van die timer de splash sluiten.

Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

Topicstarter
OrbitZ schreef op woensdag 07 april 2010 @ 11:28:
Bij nader inzien ligt het volgens mij hier aan:

Java: SplashScreen.java
1
2
3
4
5
6
7
8
9
10
11
          // Wait a little while loading resources
          try {

               Thread.sleep(iDuration);
          } catch (Exception e) {
               e.printStackTrace();
          }

          // close the screen
          dispose();
     }


Vanuit je main gaat het goed omdat je dan niet in de UI thread zit, als je die code vanuit een menu handler aanroept zit je in de UI thread en hang je dus die thread op door de sleep.

Je kan beter een timer zetten en dan door middel van die timer de splash sluiten.
Ja! dat is hem, dankje. :*)

Last.fm | Code Talks