Methode sleepen während das Spiel weiterläuft

gw1nner

Mitglied
Guten Tag,

ich möchte gerne eine Methode einbauen, die jede 20s aktiv wird, seinen job erledigt und dann wieder verschwindet. Der Clou, und das ist auch mein Anliegen, ist das es zwingend notwendig ist, das währenddessen das ganze Spiel noch funktioniert und Spieler aktionen durchführen können.

Ich habe es mit derzeit mit:

// try {
// Thread.sleep(1000L); // 1000L = 1000ms = 1 second
// }
// catch (InterruptedException e) {
// }

versucht zu lösen, jedoch möchte ich ja auch die parallele Nutzung der GUI ermöglichen.
Nach 30min im Web bin ich etwas zerstreut, wie kann man das Problem lösen?

Vielen Dank für eure Antworten.

MfG
 
Zuletzt bearbeitet:

Joose

Top Contributor
Indem du diese Arbeit die alle 20 Sekunden verrichtet werden soll auslagerst in einen eigenen Thread.

Da du wahrscheinlich alles in einem Thread hast blockiert dein
Code:
sleep
auch jede GUI Aktion (und diese friert ein).

Stichwörter zu diesem Problem: SwingWorker, EventDispatchThread
 

SilverClaw

Aktives Mitglied
Theoretisch müsste eine GUI (zumindest bei Swing) doch ohnehin in ihrem eigenen EventDispatchThread laufen. Und dort kann man wundervoll den (swing.)Timer benutzen, um das zu timen.
 

kaoZ

Top Contributor
man sollte Grundsätzlich keine länger andauernden Aktionen im EDT ausführen.....

Erstelle dir ein Runnable welches die von dir gewünschten aktionen beinhaltet, übergibt es einem Thread welcher in einer Schleife läuft und das runnable ausführt, unabhängig vom Swing Thread.

Hier nur ein Beispiel , nicht die schönste Lösung, aber dennoch funktional, gibt alle 2 Sekunden "Hallo Welt aus".

Java:
public class MyRunnable implements Runnable {

    private boolean running;
    
    public MyRunnable(boolean value) {

        this.running = value;
        
        new Thread(this).start();
    }
    
    @Override
    public void run() {
       
       while(running){
           
           System.out.println("Hallo welt");
           
           try {
               Thread.sleep(2 * 1000);
           } catch (Exception ex) {
               ex.printStackTrace();
           }
       }
    }
    
    public static void main(String[] args) {
        new MyRunnable(true);
    }
}

für gewöhnlich könnte man nun einen setter anbieten der dann den status des Threads dementsprechend setzt, und ihn insofern er inaktiv sein sollte und man den status von running auf false setzt per Thread.currentThread().interrupt(); bittet seine arbeit wieder einzustellen.

Du würdest dann einfach über z.B einen Button den status ändern und könntest somit den Thread starten und beenden.

Alternativ ist der schon oben erwähnte Timer / TimerTask eine Option.

Java:
public class MyRunnable {
    
    Timer timer;
    TimerTask task;
    
    public MyRunnable() {
        
        task = new TimerTask() {
            
            @Override
            public void run() {
                    System.out.println("Hallo Welt");
            }
        };
        
        timer = new Timer();
        
        // task wird sofort, jede sekunde ausgeführt
        
        timer.schedule(task, 0, 1000);
    }

    public static void main(String[] args) {
        new MyRunnable();
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B paintComponent Methode Spiele- und Multimedia-Programmierung 4
P Zahlenwert durch Methode ersetzen Spiele- und Multimedia-Programmierung 1
P .Wav Datei vor main-Methode abspielen? Spiele- und Multimedia-Programmierung 9
H Exeption in thread "Thread-2" NullPointerExeption: init methode? Spiele- und Multimedia-Programmierung 25
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
K Flackern bei repaint Methode Spiele- und Multimedia-Programmierung 3
A Zeichnen außerhalb der paint-Methode Spiele- und Multimedia-Programmierung 6
R Aufruf einer render-Methode Spiele- und Multimedia-Programmierung 12
M Beste methode zur Map Erstellen in "Block" Games Spiele- und Multimedia-Programmierung 2
J Images laden in static Methode Spiele- und Multimedia-Programmierung 8
P NullPointerException bei Aufruf von Methode Spiele- und Multimedia-Programmierung 10
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Run- Methode zu überladen Spiele- und Multimedia-Programmierung 4
S Methode verändert mein Eingabe Array oO Spiele- und Multimedia-Programmierung 6
S Problem beim laden eines Bildes in einer Methode Spiele- und Multimedia-Programmierung 14
D Methode in eigenem Thread auslagern Spiele- und Multimedia-Programmierung 9
A Hilfe bei der Methode COLOR (Java) Spiele- und Multimedia-Programmierung 10
S transparenz per paint()-methode will nicht Spiele- und Multimedia-Programmierung 12
H Bilder speichern 2 - Methode richten? Spiele- und Multimedia-Programmierung 2
S Zur Laufzeit auf die Methode einer anderen Klasse zugreifen Spiele- und Multimedia-Programmierung 5
A Methode:setPointAntialiasingEnable(true) Spiele- und Multimedia-Programmierung 2
chik Wie arbeitet die polygon.contains Methode in Java Spiele- und Multimedia-Programmierung 4
M KeyListener funktioniert nicht während Timer läuft Spiele- und Multimedia-Programmierung 26
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
A Körper während der livezeit in seiner Form verändern? Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben