Programmstart mit Java-Tasse

jgh

Top Contributor
Moin,

weiß jemand wie man beim Programmstart einer beliebigen Application, diese leicht opaque Java-Kaffee-Tasse implementiert?
Also, falls das noch zu undeutlich war:
Nach dem Starten der Application soll sofort die Java-Tasse erscheinen und während dieses angezeigt wird, will ich im Hintergrund die Anbindung an DB und/oder Server, Aufbau des Frames etc machen...

Gibt es evtl. fertigen Code, oder ist das gar Bestandteil der API?
Ansonsten langt mir auch gerne eine grobe Beschreibung, wie man sowas realisieren könnte.

Besten Dank im vorraus u. MfG
 
ja, so die richtung...danke!

auf alle Fälle habe ich so schonmal ein neues Keyword 😉
allerdings liefert mir der Bsp-Code:

SplashScreen.getSplashScreen() returned null
🙁
 
Wie rufst du das Beispiel denn auf? Wenn du das Programmeinfach nur startest wie immer ist das zu erwarten, was du beschrieben hast.

Im Aufruf musst du angeben ob ein Spashscreen gezeigt werden soll. So zum Beispiel:
java -splash:"c:\temp\test.gif" MeinJavaProggi

Wobei "MeinJavaProggi" die class Datei ist, die du starten willst. Und test.gif die Grafik, die beim start angezeigt werden soll.
 
Eclipse RCP /Netbeans RCP bietet das gleich eingebaut. Falls das nicht "to much" ist.

Grüße
das ist too much^^, ich wollte einfach nur so einen splashscreen, ist nur spielerei...


Wie rufst du das Beispiel denn auf? Wenn du das Programmeinfach nur startest wie immer ist das zu erwarten, was du beschrieben hast.

Im Aufruf musst du angeben ob ein Spashscreen gezeigt werden soll. So zum Beispiel:
java -splash:"c:\temp\test.gif" MeinJavaProggi

Wobei "MeinJavaProggi" die class Datei ist, die du starten willst. Und test.gif die Grafik, die beim start angezeigt werden soll.

jepp, habe ich dann auch gefunden.
hatte ansonsten nur dem code kopiert und ausgeführt, aus einer IDE raus...


falls jemand Interesse daran hat...hatte diesen Quellcode gefunden, über tutorials.de (glaube ich)
Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

/*
 * Created on 20.02.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Darimont
 * 
 *         To change the template for this generated type comment go to
 *         Window>Preferences>Java>Code Generation>Code and Comments
 */
public class SplashScreen extends JFrame {

	private Image img;
	private int x, y;

	private Timer timer;

	public SplashScreen(File pic, int x, int y, long millis) {

		this.x = x;
		this.y = y;
		setSize(x, y);

		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

		setLocation(d.width / 2 - x / 2, d.height / 2 - y / 2);

		this.setUndecorated(true);

		MediaTracker mt = new MediaTracker(this);
		try {

			img = ImageIO.read(pic).getScaledInstance(x, y, Image.SCALE_SMOOTH);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			System.err.println("Konnte Datei nicht öffnen!");
		}
		setVisible(true);

		if (img == null)
			img = this.createImage(x, y);

		mt.addImage(img, 0);

		try {
			mt.waitForAll();
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		timer = new Timer();
		timer.schedule(new ExitSplashTask(this), millis);

	}

	public static void main(String[] args) {
		// Zeig mir das Bild c:\energy.jpg in der Größe 240,180, für 5 Sekunden
		// an.
		SplashScreen screen = new SplashScreen(new File(
				"C:\\Users\\Cheffe\\Desktop\\java-logo1.jpg"), 358, 738, 5000);
	}

	public void paint(Graphics g) {
		super.paint(g);
		if (img != null)
			g.drawImage(img, 0, 0, this);
	}

	class ExitSplashTask extends TimerTask {

		private JFrame frm;

		public ExitSplashTask(JFrame frm) {
			this.frm = frm;
		}

		/*
		 * (non-Javadoc)
		 * 
		 * @see java.util.TimerTask#run()
		 */
		public void run() {
			// TODO Auto-generated method stub
			frm.setVisible(false);
			frm.dispose();
			/*
			 * Dieser Aufruf beendet hier die VM! Hier würde also normalerweise
			 * entweder die Klasse des Hauptprogramms
			 */
			System.exit(0);
		}

	}
}
 
Sieht (finde ich) unnötig kompliziert aus. Schau dir mal das hier an: klick

Eventuell ist diese Zeile hier wichtig, damit
Code:
getSplashScreen()
auch etwas liefert:
Code:
SplashScreen-Image: filename.gif
 
Ich nutze mal den Thread und erweitere die Frage: bisher habe ich SplashScreens selbst geschrieben und habe jz mal das mit der Manifest.mf ausprobiert. Funktioniert außerhalb von Eclipse wunderbar, aber wo kann ich in Eclipse einstellen, wo das Image für den SplashScreen ist?
 
Ich fürchte das geht gar nicht aus Eclipse heraus. Aus der JavaDoc:
This class cannot be instantiated. Only a single instance of this class can exist, and it may be obtained using the getSplashScreen() static method. In case the splash screen has not been created at application startup via the command line or manifest file option, the getSplashScreen method returns null.
Offenbar kann der Splashscreen nur von der Commandline Option oder von dem Manifest Eintrag eines Jars genutzt werden.
 
Natürlich geht das in Eclipse:

  1. Run\Run Configurations...
  2. Gewünschte Applikation auswählen (linke Seite)
  3. Auf Tab 'Arguments' wechseln (rechte Seite)
  4. In 'VM arguments:' eingeben:
    Code:
    -splash:"pfad"
 
jup das funktioniert. Nur ein wenig lästig, dass in der Manifest und in der Run-config zu pflegen...
 
ist der Pfad zum splash-image richtig gesetzt? Liegt es wirklich (in einem oder verschachtelten Ordner) im Projektordner (nicht src!)? Hast du wirklich bei VM-Arguments und nicht bei Programm-arguments den befehl eingegeben?
 

Zurück
Oben