Animiertes Gif auf JWindow

markus99

Bekanntes Mitglied
Hallo!
Ich versuche seit etwa 3 Stunden ein animiertes Gif in meinen Splashscreen aufzunehmen.
Warum? -> Ladebalken (ohne Prozent o.a., einfach nur eine Animation).

Nur leider bekomm ich das gif ohne einen JFrame nicht reingeklopft, was aber mies aussieht, da der Splashscreen selbst ein loses Objekt ist.

(Nebenbei, ich würde den Splashscreen gerne an einer bestimmten Farbe transparent darstellen!)
Erstmal zu meinem aktuellen Problem.

Hier der Code:

Java:
import javax.swing.JWindow;
import javax.swing.ImageIcon;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class TransparentSplashScreen extends JWindow implements Runnable
{
	private static final long serialVersionUID = 1L;
	Image bi = Toolkit.getDefaultToolkit().getImage("nsp.png"); //Splashscreen Grafik
	ImageIcon ii = new ImageIcon(bi); //Splashscreen
	Image ladebalken =Toolkit.getDefaultToolkit().getImage("balken.gif");
	ImageIcon balken = new ImageIcon(ladebalken);
	private boolean running = false;

	public boolean isRunning()
	{
		return running;
	}

	public void run()
	{
		try
		{
			running = true;
			setSize(ii.getIconWidth(), ii.getIconHeight());
			setLocationRelativeTo(null);
			setVisible(true); //besser als show
			Thread.sleep(5000);
			dispose();
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
		}
		running = false;
		dispose();
	}

	public void paint(Graphics g)
	{
		g.drawImage(bi, 0, 0, this);
	}
}

Aufruf in Main Klasse:
Java:
		Thread splashThread = new Thread(new TransparentSplashScreen());
		splashThread.start();

Wie könnte ich das gif (als Icon oder Icon oder ImageIcon) animieren - und zwar direkt auf dem Splashscreen?


Edit:

Ich habe es nun geschafft den Balken animiert anzuzeigen, allerdings erst sobald ich 2, 3 mal mit der Maus drüber fahre!
Dazu habe ich folgenden Code in die Paint Methode gesetzt (natürlich erst initialisiert).
Java:
		myButton.setIcon(balken);
		myButton.setLocation(80, 160);
		myButton.setSize(400, 50);
		add(myButton);
		//Edit: Auch mit setVisible ändert sich nichts

Wenn ich ihn in run() ausführe, dann wird das Spash-Hintergrundbild nach 2, 3 Mausbewegungen mit dem animierten Ladebalken "getauscht", wobei der überschüssige Bereich (Größenunterschied) weiß dargestellt wird :bahnhof:
Aber auch in der Paint-Methode muss ich den Button erst "aktivieren" indem ich mehrmals mit der Maus darüber fahre.
 
Zuletzt bearbeitet:

markus99

Bekanntes Mitglied
Edit: Lösung war eigentlich sehr einfach.
Schade dass es auf Donnerstag kaum Nachteulen gibt!

myButton.repaint();

Schiebt den Fokus des Buttons (mit dem animierten GIF) über den Splash-Screen.
Ich habe die ganze Zeit versucht den Button als unteren Layer zu sehen, der vom Splash überdeckt wird .. Könnte mich eines Büschel Haaren entledigen.



Problem 2
Falls noch jemand Interesse hat mir bei meinem Problem mit der Transparenz zu helfen, ich wäre überglücklich!

Oben steht noch der Code meines Splash-Screens. Ich möchte eine Farbe des Bildes komplett Transparent haben (es handelt sich nur um abgerundete Kanten). Die Grafik selbst ist bereits transparent vorhanden, als png sowie gif (schon viel getestet ...), wobei Transparenz absolut gegeben ist - habe ich über HTML extra noch einmal getestet.
 
Zuletzt bearbeitet:

markus99

Bekanntes Mitglied
Ich weiß nicht warum oder wesshalb, Zuhause lief es problemlos.
Nun habe ich mir meine Files kopiert und ein neues Projekt mit identischen Voraussetzungen erstellt.

Ergebnis: Das animierte Gif funktioniert nicht mehr!
Ich dreh wirklich bald am Rad!

Pfade funktionieren meistens nicht (egal ob Projekt-Resourcen oder nicht), Gifs werden "zufällig" nicht mehr animiert, was stimmt den nicht mit diesem Eclipse Zeug?
Alles reine Glückssache!

In meiner JList habe ich eine Schleife die HTML-Code in die Zeilenelemente einfügt, dabei ein Bild welches im Projekt ist.
Zuhause musste ich den Pfad immer neu ermitteln, nun läuft es durch eine direkte Angabe des Dateinamen? Aber auch nur seit 5 Minuten, vorher war dies nicht der Fallm mit garantiert identischem Code.

Ist das wirklich normal? Ich habe das Gefühl ich lass mich immer auf ein Glücksspiel ein wenn es um Bilder in Eclipse geht.


-> Der Splashscreen startet als Thread und bekommt Methoden von JWindow vererbt. Darauf wird ein Bild gezeichnet (paint()).
Daraufhin wird die Klasse/der Thread ausgeführt (run()). Diese Methoden waren mir neu (Thread-Handling), aber ich habe sie als Ansatz für -meistens erfolgreiche- Versuche genutzt.

Nun Lade ich ein Bild (GIF) über die Klasse Image. Dieses Image lade ich in die Klasse ImageIcon.
Das Objekt ImageIcon mit dem GIF lade ich in einen JButton (bitte nicht fragen wesshalb, ich hatte mit ImageIcon einfach nicht die Möglichkeiten). Dieser jButton wird von mir Initialisiert, Zugewiesen, Gezeichnet, Positioniert und refresht.

Zuhause am Rechner wurde es animiert, auf meinem Notebook aber nicht. :bahnhof:
 
S

Spacerat

Gast
Also solange das Gif auf die Art geladen wird, wie du das machst, brauchst du keinen zusätzlichen Thread, sondern lediglich einen ImageObserver ungefähr so wie hier: http://www.java-forum.org/spiele-mu...rbesserungvorschlaege-spiel-z.html#post877791.
Und was zum H will man immer mit diesem ImageIcon? Ist das der Ersatz des MediaTrackers? Nicht jedes Bild ist ein Icon. Wenn man Bilder ohne MediaTracker laden will kann man das auch anders haben: Per ImageConsumer, ImageProducer und ImageObserver z.B.
 
Zuletzt bearbeitet von einem Moderator:

markus99

Bekanntes Mitglied
Vielen Dank dass du mir nach meinem Geheule noch helfen möchtest!
Der Witz an der ganzen Sache ist ja dass es auf 2 verschiedenen Computern unterschiedlich abläuft.
Einmal gehts, einmal nicht.

Hoffentlich kann ich etwas mit deinem Link anfangen, bisweilen zähle ich mich zu den blutigen Anfängern.
Ich verstehe halbwegs die Grundstrukturen usw., habe jedoch gerade erst ein Lehrbuch abgearbeitet welches sich auf absolute Basics beschränkt hat.

Nun denn, auf in die 6te SplashScreen Klasse.
 
S

Spacerat

Gast
Einmal gehts, einmal nicht.
Verstehe... Blinkersoftware... Verwende doch einfach 'nen Relais. :lol:
Okay, mal im Ernst. Meist liegen solche Fehler an der Verfügbarkeit von nachzuladenen Ressourcen. Ressourcen sind dann Verfügbar, wenn Name und Pfad der Ressource zu einer vorhandenen Datei passen und ebenso auch Zugriffsrechte darauf gewährt wurden.
 

markus99

Bekanntes Mitglied
Nochmal getestet. Auf dem Rechner funktioniert es tadellos.
Identisches Projekt, dieselbe JRE/JDK, identischer Code -> funktioniert nicht auf dem Laptop.
Das GIF wird einfach nicht animiert, aber angezeigt.
 
S

Spacerat

Gast
Moment, ich teste mal mit... ... ...
Sag' mal, wo ist eigentlich der funktionierende Code geblieben? Ach, den hattest noch gar nicht gepostet. Tja, dann kann ich dir auch nicht helfen... aber ist sicher was ganz banales. :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G animiertes gif, qualität AWT, Swing, JavaFX & SWT 3
A Applet Animiertes gif in awt applet anzeigen AWT, Swing, JavaFX & SWT 11
M animiertes Bild nach Klick auf Button AWT, Swing, JavaFX & SWT 3
G Animiertes TabIcon AWT, Swing, JavaFX & SWT 2
SebSnake Animiertes GIF auf JPG Hintergrund darstellen? AWT, Swing, JavaFX & SWT 3
F Animiertes Gif als BufferedImage AWT, Swing, JavaFX & SWT 10
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
V JWindow: Falsche Anzeige auf Ubuntu AWT, Swing, JavaFX & SWT 2
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
H Swing JTextField in JWindow, JWindow bekommt focus zurück? AWT, Swing, JavaFX & SWT 9
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
M Swing Semi-Transparenter Button (normal, mouseover) auf transparentem JWindow AWT, Swing, JavaFX & SWT 44
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
GUI-Programmer JWindow zwischen den Desktopbild und Dektopverknüpfungen AWT, Swing, JavaFX & SWT 16
N JOptionPane als JWindow AWT, Swing, JavaFX & SWT 2
J Swing JWindow flackert trotz Doppelpufferung AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
E JWindow bewegen, minimieren, vergrößern und schließen AWT, Swing, JavaFX & SWT 5
H Swing JWindow flackert beim resizen AWT, Swing, JavaFX & SWT 6
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
D JWindow rund machen AWT, Swing, JavaFX & SWT 11
hdi JWindow's mouseExited methode AWT, Swing, JavaFX & SWT 2
P JFrame/JWindow in der Mitte des Bildschirms positionieren AWT, Swing, JavaFX & SWT 4
R JWindow dockt nicht an JFrame bzw. nicht sichtbar ? AWT, Swing, JavaFX & SWT 6
M JWindow mit Rahmen(border) ausstatten AWT, Swing, JavaFX & SWT 4
C JWindow.setVisible(true) dauert ewig AWT, Swing, JavaFX & SWT 7
G JFrame/JWindow AWT, Swing, JavaFX & SWT 2
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
G JWindow Fensterhirachie beibringen AWT, Swing, JavaFX & SWT 14
R JWindow und JFrame AWT, Swing, JavaFX & SWT 3
S Bild auf JWindow platzieren AWT, Swing, JavaFX & SWT 4
L Probleme mit JTextField im JWindow AWT, Swing, JavaFX & SWT 4
F JWindow mit einem Bild und Transparenz AWT, Swing, JavaFX & SWT 4
L JWindow schliessen AWT, Swing, JavaFX & SWT 4
M jwindow --> jpanel --> jpanel --> textfeld nicht en AWT, Swing, JavaFX & SWT 3
D JWindow => transparent ? AWT, Swing, JavaFX & SWT 2
S JWindow zeichent Bild nicht AWT, Swing, JavaFX & SWT 2
K JWindow zerstören AWT, Swing, JavaFX & SWT 3
B KeyEvents und JWindow AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen


Oben