Brauche hilfe bei Java?
Wie kann ich bei Java machen das mein Spielstand alle 5 Sekunden gespeichert wird?
2 Antworten
Mit der minimalen Informationsfülle, die Du uns gegeben hast, ist nicht viel anzufangen. Wenn Du aber einfach eine Methode hast, die den Spielstand speichert und du nur wissen willst, wie Du diese Methode alle 5 Sekunden aufrufen kannst - Das geht zum Beispiel mit einem Timer: (Gehen wir davon aus, du hast die Methode "speichern" des Objektes "spiel")
import java.util.Timer;
// ...
new Timer("game-saver").schedule(new TimerTask() {
@Override
public void run() {
spiel.speichern();
}
}, 0, 5*1000);
Die drei Parameter sind in gleicher Reihenfolge:
- Eine TimerTask
- Anzahl Millisekunden vor der ersten Ausführung
- Anzahl Millisekunden zwischen allen weiteren Ausführungen
Die Einheit dabei ist Millisekunden, 5*1000ms = 5 Sekunden.
Das heißt dein Problem ist nicht die periodischen Ausführung sondern das persistente Speichern?
Offensichtlich übertreibst du ein bisschen und Timer ist aus 1.3, aber die Dokumentation sagt folgendes:
Java 5.0 introduced the java.util.concurrent package and one of the concurrency utilities therein is the ScheduledThreadPoolExecutor which is a thread pool for repeatedly executing tasks at a given rate or delay. It is effectively a more versatile replacement for the Timer/TimerTask combination, as it allows multiple service threads, accepts various time units, and doesn't require subclassing TimerTask (just implement Runnable). Configuring ScheduledThreadPoolExecutor with one thread makes it equivalent to Timer.
Die Antwort von dir ist also tatsächlich besser, vor allem weil sie keine unnötige "TimerTask" Instanz benötigt:
ScheduledExecutorService.
scheduleAtFixedRate(spiel::speichern, 0, 5,
TimeUnit.SECONDS);
Arbeitest du mit Threads? Kennst du dich da aus?
Sorry, kenne mich da garnicht aus :/ weiß garnicht was nicht ma, was ein Thread ist
In einem Programm gibt es mindestens einen Thread. Der führt das Programm aus.
Ein Programm kann mehrere Threads haben, also zwei Ausführungen gleichzeitig. Der zweite Thread speichert alle 5 Sekunden die Daten.
Erstelle dazu eine Klasse MyClass mit 'implements Runnable' und einer Methode void run(); Diese führt das zweite aus.
MyClass inst = ....;
Thread:start( inst ) startet den Thread.
Es gibt aber weitere Bedingungen für Threadprogrammierung. Insbesondere beim Zugriff auf Daten aus mehr als einem Thread zur Zeit.
Keine Aktivierung.
Implements bedeutet, dass du alle Methoden eines Interfaces in der Methode mit seinen definierten Argumenten implementierst.
Runnable (nicht runnable) ist von Java schon definiert und hat nur eine Methode.
Wenn die Klasse
void run() {}
in der Klasse hast, ist alles fertig.
Hi, das hier ist der Code, wennn es dir hilft :
Ich weiß, ist ziemlicher Kinder-Code, wollte es simpel haben... Wie ganz unten zu sehen ist, möchte ich, dass man jede Minute eine "Himmibeere" bekommt. Aber das funktioniert auch irgendwie nicht richtig... Bleibt immer bei 1 stecken und auf 2 kommt man erst garnicht... Ich wollte, wenn das funktioniert, dass der Code bzw. der aktuelle "Spielstand" gespeichert wird. Heißt, wenn ich momentan 3 Himmibeeren habe und das Ding morgen nochma öffne, möchte ich wieder auf die 3 kommen...