# Eclipse Splash Bild bei Runnable Jar Export mitnehmen



## Jay1980 (5. Jan 2010)

Servus,

ich habe in meinem Eclipse-Projekt einen Ordner 'files'. Führe ich das Eclipse-Projekt aus, dann lautet der Pfad, den ich in der Klasse habe 'files/splash.png' und das Bild wird gefunden. Nun exportiere ich das Projekt als Runnable Jar und dann klappt das nicht mehr. Kann ich das bei den Runnable Jar Optionen einstellen oder muss ich das Jar in ein Verzeichnis legen, den Ordner files auf gleicher Hierachiestufe händisch anlegen und dann das jar ausführen? Zum Download der Anwendung kann ich dann ja den Ordner zippen und sagen 'entpacken' und Datei start.jar anklicken. Wie macht ihr das?

Danke vorab.


----------



## Tobias (5. Jan 2010)

Ich lege meine Bilder mit ins JAR und lade sie über Class#getResourceAsStream().


----------



## Jay1980 (5. Jan 2010)

Hast du beim Eclipse Runnable  Jar Export die Standardeinstellungen, also landen dann die Bilder auch im jar-File?

Kannst du Codezeilen posten (oder) einen Link, in dem das erklärt wird mit der getResource bzw. getResourceAsStream-Methode. Die Sachen die ich bis jetzt fand, sind da etwas widersprüchlich, meist sind da auch mehrere Klassen beteiligt und ich weiss nicht ob die Beispiele so umlegbar auf meine Situation sind. Ich habe schon selber etwas geschaut, aber wirklich schlau wurde ich nicht draus.


----------



## Jay1980 (16. Jan 2010)

Habs nun gepackt, einmal der Konstruktor der Klasse TehakuSplash, die aus der Main-Klasse aufgerufen wird.


```
public TehakuSplash(Frame f)
	{
		
		super(f);
		
		int waitTime = 4000;
		String pathToPng = "tckhalle/images/tehaku_splash.png";
		URL urlimage = ClassLoader.getSystemResource( pathToPng );
		
        JLabel l = new JLabel(new ImageIcon( urlimage ));
        getContentPane().add(l, BorderLayout.CENTER);
        pack();
        Dimension screenSize =
          Toolkit.getDefaultToolkit().getScreenSize();
        Dimension labelSize = l.getPreferredSize();
        setLocation(screenSize.width/2 - (labelSize.width/2),
                    screenSize.height/2 - (labelSize.height/2));
        addMouseListener(new MouseAdapter()
            {
                public void mousePressed(MouseEvent e)
                {
                    setVisible(false);
                    dispose();
                }
            });
        final int pause = waitTime;
        final Runnable closerRunner = new Runnable()
            {
                public void run()
                {
                    setVisible(false);
                    dispose();
                }
            };
        Runnable waitRunner = new Runnable()
            {
                public void run()
                {
                    try
                        {
                            Thread.sleep(pause);
                            SwingUtilities.invokeAndWait(closerRunner);
                        }
                    catch(Exception e)
                        {
                            e.printStackTrace();
                            // can catch InvocationTargetException
                            // can catch InterruptedException
                        }
                }
            };
        setVisible(true);
        Thread splashThread = new Thread(waitRunner, "SplashThread");
        splashThread.start();
	}
```

Der Ausschnitt der main-Methode:

```
Frame frame = new Frame();
		new TehakuSplash(frame);
```

Die Ordnerstruktur:
Projektname
-- tckhalle
-----| Main.java
-- tckhalle.utilities
-----| TehakuSplash.java
-- tckhalle.images
-----| tehaku_splash.png

Das war alles, dann im Eclipse Export auf RunnableJar samt Standardeinstellungen und fertig ist das RunnableJar samt Splash-Screen. Ich hoffe die Leute sparen sich einige Zeit, ich musste eine funktionierende Lösung aus einigen Threads zusammentragen.


----------

