Hey,
in meinem CookieClicker möchte ich ein "Klicks pro Sekunde" Feature einbauen, also ein Feature welches die Klicks auf meinem Cookie innerhalb einer Sekunde zählt und die dann wiedergibt. Da das parallel zum Programm laufen soll, dachte ich mir ich löse das mit Threads. In meinem Thread prüfe ich ein boolean, welcher festlegt wann der Thread gestartet werden darf und wann nicht, wenn ich auf meinem Cookie klicke. Ich warte im thread dann eine Sekunde, während ich in dieser Sekunde bei jedem Klick einer Zählervariable eins dazuzähle. Nach Ablauf der Sekunde soll der Wert der Variable genommen werden un vorerst auf der Konsole ausgegeben werden.
So sieht mein Code bisher aus:
Hier die implementierung in der Hauptklasse(in einem MouseListener):
Ich hab dann noch in der regulären Klasse die Thread Klasse instanziert:
Mein Problem ist jetzt, dass nach der einen Sekunde zwar die Klicks in dieser Sekunde in der Konsole angezeigt werden, dann allerdings eine Exception auftritt (IllegalThreadStateException). Muss ich den Thread irgenwie noch nach dem durchlaufen abbrechen?
Oder gibt es noch eine sinnvollere Möglichkeit die Klicks pro Sekunde parallel zum eigentlichen Programm abzufragen? Ich weiß dass das Momentan vom Prinzip her ziemlich schlecht ist wie ich versuche die CPS zu bekommen, aber dass würde ich dann später noch optimieren, wenn ich mir sicher bin, dass das mit dem Thread klappt.
Vielen Dank für Hilfe
LG M.V.
in meinem CookieClicker möchte ich ein "Klicks pro Sekunde" Feature einbauen, also ein Feature welches die Klicks auf meinem Cookie innerhalb einer Sekunde zählt und die dann wiedergibt. Da das parallel zum Programm laufen soll, dachte ich mir ich löse das mit Threads. In meinem Thread prüfe ich ein boolean, welcher festlegt wann der Thread gestartet werden darf und wann nicht, wenn ich auf meinem Cookie klicke. Ich warte im thread dann eine Sekunde, während ich in dieser Sekunde bei jedem Klick einer Zählervariable eins dazuzähle. Nach Ablauf der Sekunde soll der Wert der Variable genommen werden un vorerst auf der Konsole ausgegeben werden.
So sieht mein Code bisher aus:
Java:
//Die Thread Klasse
public class CPSThread extends Thread {
private CookieClickerGUI cps; //Inztanz der HauptGUI-Klasse
public CPSThread(CookieClickerGUI cps) {
this.cps = cps;
}
@Override
public void run() {
cps.setCpsBoolean(false); //boolean welcher prüft ob der Thread gestartet werden darf
try {
sleep(1000);
} catch (InterruptedException e) {
System.err.println("Error while sleeping.");
e.printStackTrace();
}
cps.setCpsBoolean(true);
System.out.println(cps.getClicksPerSecond());
cps.setClicksPerSecond(0);
}
}
Hier die implementierung in der Hauptklasse(in einem MouseListener):
Java:
private int clicksPerSecond;
private boolean cpsBoolean;
//dies hier im Listener:
clicksPerSecond++; //Bei jedem Klick auf den Cookie zählt sie Variable um 1 hoch.
if(cpsBoolean == true) { //Nur wenn der Boolean true ist soll der Thread beim Klick auf den Cookie ausgeführt werden.
cpsThread.start();
}
Java:
CPSThread cpsThread = new CPSThread(this);
Oder gibt es noch eine sinnvollere Möglichkeit die Klicks pro Sekunde parallel zum eigentlichen Programm abzufragen? Ich weiß dass das Momentan vom Prinzip her ziemlich schlecht ist wie ich versuche die CPS zu bekommen, aber dass würde ich dann später noch optimieren, wenn ich mir sicher bin, dass das mit dem Thread klappt.
Vielen Dank für Hilfe
LG M.V.