Java Warteschlange?
while(scan.hasNextLine()) {
String line = scan.nextLine();
LabyMod.getInstance().displayMessageInChat(line);
LabyMod.getInstance().displayMessageInChat(amount);
if (line.startsWith(amount + ",")) {
LabyMod.getInstance().displayMessageInChat(line);
String[] datas = line.split(",");
String dataAmount = datas[0];
Double dataX = Double.parseDouble(datas[1]);
Double dataY = Double.parseDouble(datas[2]);
Double dataZ = Double.parseDouble(datas[3]);
String dataItem = datas[4];
boolean isStack = false;
String dataStackWarnMin = datas[6];
dropItem(dataX, dataY, dataZ, dataItem, isStack, Integer.valueOf(dataStackWarnMin), customer, amount);
break;
}
}
Ich programmiere eine Modifikation für Minecraft. Bei einer Situation soll er den oben genannten Code ausführen. Allerdings darf dieser Code nur maximal 1x alle 3 Sekunden ausgeführt werden. Dieser Code ist eine Methode.
Sollte durch eine Situation diese Methode 2x aufgerufen werden, soll sie hintereinander mit einem Abstand von 3 Sekunden ausgeführt werden.
Wie mache ich das?
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
![](https://images.gutefrage.net/media/user/MrAmazing2/1562539605664_nmmslarge__63_0_466_466_da6195808c107c57ce2a8b233a2bcf4f.jpg?v=1562539606000)
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Java
In meinem Beispiel nenne ich deine Methode yourFunc.
So ginge es:
Deine Klasse braucht folgende Attribute:
int waitingForExecution = 0;
long lastExecuted = 0;
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
Und dann fügst du einfach noch folgende Funktion ein:
public void callYourFunc() {
if (waitingForExecution <= 0 && lastExecuted < System.currentTimeMillis() - 3000) {
yourFunc();
lastExecuted = System.currentTimeMillis();
} else {
executor.schedule(()->{
waitingForExecution--;
yourFunc();
}, lastExecuted+3000-System.currentTimeMillis() + waitingForExecution++*3000, TimeUnit.MILLISECONDS);
}
}
Fertig.
Anstatt deine Funktion direkt aufzurufen kannst du jetzt einfach immer callYourFunc() aufrufen. Das kümmert sich dann um die verzögerte Ausführung.
Woher ich das weiß:eigene Erfahrung – Minecraft-Experte. Aktiver Spieler seit 2011.