Ergebnis 1 bis 6 von 6

Java Problem: Nach Klick auf einen Button mehrere Aktionen nacheinander ausführen

  1. #1 Zitieren
    Forentroll Avatar von Harbinger
    Registriert seit
    Jul 2003
    Ort
    Rheinhessische Toscana
    Beiträge
    19.036
    Tach auch. Folgendes Problem, ich bin gerade dabei ein Java-Programm zu schreiben, das nach Klicks auf einen Button verschiedene Dinge tun soll. Präzise: Nach dem Klick auf einen Button soll eine GIF-Animation abgespielt werden und sobald diese zu Ende ist, soll sich eine weitere Animation "anschließen". Ich habe versucht, die Sache auf folgendem Wege zu lösen:
    Code:
            long millisToWait = 492;
            long millis = System.currentTimeMillis();
            while((System.currentTimeMillis() - millis) < millisToWait) {
                // Do nothing
            }
    Vor diesen paar Zeilen wird die erste Animation als ImageIcon auf ein Label gesetzt, danach soll die zweite gesetzt werden. 492 ms ist die Länge der erste Animation. Problem ist, obwohl der Teil des Codes weiter unten steht, als die vorige Anweisung, die erste Ani zu setzen, wartet das Programm nach dem Klick 492 ms und setzt dann direkt hintereinander beide Animationen, so dass die erste direkt von der zweiten überschrieben wird. Ich hatte auch erwogen, die Sache mittels Thread.sleep zu lösen, aber ich habe gelesen, dass man solche Anweisung in einer Klasse, die den ActionListener implementiert, besser nicht verwenden sollte. Irgend eine Idee, wie das klappen kann? Danke jedenfalls schon mal für jede Antwort
    Harbinger ist offline

  2. #2 Zitieren
    Pretty Pink Pony Princess  Avatar von Multithread
    Registriert seit
    Jun 2010
    Ort
    Crystal Empire
    Beiträge
    11.233
    simpel: Wie soll das Programm etwas machen wenn du es blockierst? Du musst in deiner While schlaufe die Events abarbeiten die Windows so wirft (in C# gibt es Application.DoEvents(), aber gibt anscheinend kein java Equivalent).

    Einfachste Lösung: ein 2ter Thread welcher die Gif's anstöst. Ev mit Invoke.
    Dadurch verhinderst du das der Main Thread Blockiert wird, das Gif sollte also laufen können.

    Poste mal den Code, ev gibts noch andere möglichkeiten. zb. das Animation.Finished? event abzufangen und damit das nächste GIF anzustosen.

    ? gibt es sowas in der java gif klasse?

    Thread.Sleep sollte mMn nur in einem Fall tunlichst vermieden werden: wenn es sich um den Main Thread handelt der die GUI's verwalten muss. Ansonsten ist es reichlich egal. Da sind dann auch normalerweise keine Event's zu handeln (oder werden die vom Aufrufenden Thread gehandelt wie in .NET?).
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread ist offline Geändert von Multithread (07.10.2014 um 20:20 Uhr)

  3. #3 Zitieren
    Forentroll Avatar von Harbinger
    Registriert seit
    Jul 2003
    Ort
    Rheinhessische Toscana
    Beiträge
    19.036
    Der komplette relevante Teil des Codes:
    Code:
    	public void actionPerformed(ActionEvent event) {
    		ImageIcon image;
    		ImageIcon image1;
    		ImageIcon image2;
    
    		if (clicks < 10 && started == true) {
    			image = new ImageIcon(getClass().getResource(
    					((choice[clicks] + ".jpg"))));
    
    			label[clicks].setIcon(image);
    			clicks++;
    			started = false;
    
    		} else if (event.getSource().equals(mybutton)) {
    
    			if (clicks < 10 && started == false) {
    				image1 = new ImageIcon(getClass().getResource(
    						(clicks + 1 + ".gif")));
    				label[clicks].setIcon(image1);
    				image2 = new ImageIcon(getClass().getResource((("ani.gif"))));
    				label[clicks].setIcon(image2);
    				long msToWait = 492;
    				long millis = System.currentTimeMillis();
    				while ((System.currentTimeMillis() - millis) < msToWait) {
    					// Do nothing
    				}
    
    				started = true;
    			}
    
    		}
    	}
    Prinzipiell handelt es sich bei dem Programm um eine "Tombola" (ziehen ohne zurücklegen). Anfänglich sind zehn Bilder eingeblendet, die einfach nur Platzhalter sind, sobald zum ersten Mal auf den Button geklickt wird, sollen an der Stelle des ersten Bildes die beiden GIFs abgespielt werden, nach dem erneuten Klicken auf den Button soll dann ein anderes, zufällig ausgewähltes Bild an der Stelle erscheinen. Rinse, repeat.
    Harbinger ist offline

  4. #4 Zitieren
    Pretty Pink Pony Princess  Avatar von Multithread
    Registriert seit
    Jun 2010
    Ort
    Crystal Empire
    Beiträge
    11.233
    WIe ich schon sagte: das Bild kann gar nicht ablaufen, da du den Thread Blockierst

    nach
    Code:
    label[clicks].setIcon(image2);
    Musst du dafür sorgen das nicht mehr dein eigener Code ausgeführt wird bis das image abgelaufen ist.

    Dann klappt das auch, einige wege habe ich oben schon aufgezeigt. ein Anderer wäre zb. noch ein Timer
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread ist offline

  5. #5 Zitieren
    Forentroll Avatar von Harbinger
    Registriert seit
    Jul 2003
    Ort
    Rheinhessische Toscana
    Beiträge
    19.036
    Alles klar, dank dir, mit Timer hat's geklappt
    Harbinger ist offline

  6. #6 Zitieren
    Pretty Pink Pony Princess  Avatar von Multithread
    Registriert seit
    Jun 2010
    Ort
    Crystal Empire
    Beiträge
    11.233
    Zitat Zitat von Harbinger Beitrag anzeigen
    Alles klar, dank dir, mit Timer hat's geklappt
    Ach, die anderen vorschläge sollten auch alle Funktionieren.

    Dann ist aber ja alles io
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •