Welche Möglichkeiten gibt es in Java, jede Sekunde etwas auszuführen?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich nehme immer Timer:

javax.swing.Timer

Beispiel:

Timer timer = new Timer(1000, actionEvent -> {
  // Do smth
});

// Nicht sicher, ob das nötig ist:
timer.setRepeats(true);

timer.start();

Brockdish 
Beitragsersteller
 28.07.2020, 08:27

Ok ich habe das Problem behoben.

Danke für deine Antwort!

Brockdish 
Beitragsersteller
 28.07.2020, 00:49

AAAAAAAAAAHHH WIE STOPPT MAN DAS???????

Ich habe das aus dem Code rausgelöscht und es wird immer noch ausgeführt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Bittehelfensiemir ich werde vollgespamt!

timer.stop() funktioniert nicht!!!!!!!!!!!!!!!!!!!!!!

Brockdish 
Beitragsersteller
 17.07.2020, 20:41

Weißt du, was

Syntax error on token(s), misplaced construct(s)

bedeutet?

XGamer11208  17.07.2020, 20:43
@Brockdish

Sehe gerade, dass 'ScheduledExecutorService' wirklich die bessere Wahl wäre.
Wahrscheinlich nicht unbedingt einfacher, aber deutlich besser!

XGamer11208  17.07.2020, 20:45
@Brockdish

Im direkten Vergleich gewinnt ScheduledExecutorService.

Multithread Support, Unabhängig von der Systemzeit, Kann Exceptions direkt fangen und anderweitig bearbeiten..

Brockdish 
Beitragsersteller
 17.07.2020, 20:59
@XGamer11208

Also ich programmiere ein Minecraft Plugin, wo jede Sekunde etwas passieren soll. Ich habe es mit Schedulern versucht, aber Eclipse zeigt mit keine Fehler an, jedoch gibt es einen Fehler. Obwohl ich nirgendwo return false; in onCommand stehen habe, wird es trotzdem ausgeführt und der ganze Code wird abgebrochen.

Yoshi32  17.07.2020, 21:40
@Brockdish

Es gibt eine Exception, weil du den Scheduler vermutlich falsch verwendest. Wir brauchen einen genauen Stacktrace und deinen Code, wenn wir dir weiterhelfen sollen.

Brockdish 
Beitragsersteller
 17.07.2020, 22:13
@Yoshi32
int repeatingScheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getPlugin(), new Runnable() {
						
	@Override
	public void run() {
		
		//code
	
        }
					
}, 0, 20);
Brockdish 
Beitragsersteller
 18.07.2020, 20:32
@Yoshi32
Also ich programmiere ein Minecraft Plugin, wo jede Sekunde etwas passieren soll. Ich habe es mit Schedulern versucht, aber Eclipse zeigt mit keine Fehler an, jedoch gibt es einen Fehler. Obwohl ich  nirgendwo return false; in onCommand stehen habe, wird es trotzdem ausgeführt und der ganze Code wird abgebrochen.

Steht in einem meiner Kommentare

Also es wird in der onCommand Methode nur return false; ausgeführt und sonst nichts, obwohl ich da was ganz anderes stehen habe.

Yoshi32  18.07.2020, 21:55
@Brockdish

Offensichtlich wird ja nicht nur return false ausgeführt. Der Code, welchen du oben gepostet hast, ist keine vollständige Methode. Wenn du nirgends ein return statement hast, wird der Compiler dich ja nicht durchlassen, wie sieht es also damit aus?

Brockdish 
Beitragsersteller
 18.07.2020, 23:07
@Yoshi32

Ja ich habe ja nur den Scheduler gepostet.

return true; habe ich am Ende natürlich stehen, ansonsten würde Eclipse eine Fehlermeldung anzeigen, aber Eclipse zeigt gar keine Fehlermeldungen an.

Yoshi32  19.07.2020, 13:48
@Brockdish

Dann kann es ja erst mal gar nicht false returnen. Stattdessen wird vermutlich irgendwo ein Fehler geworfen. Pack doch mal alles in ein try/catch und printe den Stacktrace für eine Exception jeglicher Art.

Woher ich das weiß:Hobby – Ich programmiere in meiner Freizeit mit Java.

Brockdish 
Beitragsersteller
 17.07.2020, 20:43

Ich habe es ja mit Schedulern versucht, aber dann kommt eine Fehlermeldung, die niemand versteht und im Code keine Fehler erkennbar sind.

Isendrak  17.07.2020, 21:07
@Brockdish
die niemand versteht

Nein, die du nicht verstehst und selbstverständlich geheimhälst, damit dir bloß niemand helfen könnte... -.-

Brockdish 
Beitragsersteller
 17.07.2020, 22:17
@Isendrak

Junge wieso sollte ich es geheim halten??

Isendrak  17.07.2020, 22:20
@Brockdish

Woher soll ich denn wissen, warum du das tust? o.O

Aber Tatsache ist: Du hälst die Meldung geheim.

Brockdish 
Beitragsersteller
 17.07.2020, 23:00
@Isendrak

Ok dann schicke ich dir halt die Fehlermeldung.

Selbst wenn du dich mit Minecraft Plugins auskennen würdest, würdest du daraus nichts machen können:

[22:52:47 ERROR]: null

Ich hoffe, du kannst mir helfen (xD)

Isendrak  17.07.2020, 23:21
@Brockdish

Sehr hübsch... Jetzt fehlt nur noch der Code dazu.

P.S.: Hätt ich denn ahnen können, dass die Fehlermeldung (ist das wirklich alles? o.O) so dermaßen nichtssagend ist?

Brockdish 
Beitragsersteller
 18.07.2020, 00:29
@Isendrak

Ja das ist die ganze Fehlermeldung.

Ich habe die ja geschrieben, dass niemand die Fehlermeldung versteht xD

Den Code schicke ich dir mit FA

int Sekunden = 1;
while(true){
...
Thread.sleep(1000 * Sekunden)
}

Brockdish 
Beitragsersteller
 28.07.2020, 00:44

Mir wird gesagt, dass ich

int Sekunden = 1;
while(true) {
	try {
		Thread.sleep(1000 * Sekunden);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
	}
}

verwenden muss.

Kannst du mir bitte erklären? xD

PixelDerHund  28.07.2020, 01:18
@Brockdish

Unter bestimmten Umständen kann sleep eine Exception werfen. Das ist beim MainThread schwer zu erreichen, aber bei künstlich erzeugten Threads kann das durchaus, aber selten, vorkommen. Standartmäßig wirft aber sleep eine Excetpion zurück

Brockdish 
Beitragsersteller
 28.07.2020, 08:28
@PixelDerHund

Verstehe ich irgendwie nicht so ganz xD

Ich benutze einfach den Timer