Das gehört jetzt nicht umbeding hier hinein, aber wo wir schon grad beim Thema sind...
Ich habe jetzt folgende Idee gehabt. Ich habe eine Klasse KeyBoardListener, die KeyListener und Runnable implementiert.
In der Methode KeyPressed() wird der Thread gestartet. Der Thread wird unterbrochen, indem die Taste losgelassen wird. Dieser Event wird in der Methode keyReleased() abgefangen und interrupt() wird aufgerufen. Dadurch solle der Thread unterbrochen werden. Aber irgendwie funktioniert was nicht richtig. Kann gut sein, dass ich was mit dem Thread und interrupt() verbockt habe. Ich habe noch nicht viel mit Threads programmiert.
Hier mal den Code:
[Java]
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()== KeyEvent.VK_RIGHT){
direction = "right";
key_pressed.start(); //The thread is started
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT){
direction = "left";
key_pressed.start();
System.out.println("Thread started"); //The thread is started
}
}
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()== KeyEvent.VK_RIGHT){
key_pressed.interrupt(); //The thread is interrupted
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT){
key_pressed.interrupt(); //The thread is interrupted
}
}
@Override
public void keyTyped(KeyEvent e) {
}
//Returns the x_speed of the shape
public int get_x_speed_shape(){
int a = x_speed_shape;
x_speed_shape = 0;
return a;
}
@Override
public void run() {
//While the Thread is running, there has to be a constant x_speed of the shape, until
//the thread is interrupted (in the keyReleased()-Method).
while(true) {
if(direction == "right"){
x_speed_shape = 10;
}
else if(direction == "left"){
x_speed_shape = -10;
}
try {
Thread.sleep(100);
}catch(InterruptedException e) {
System.out.println("Thread is interrupted ==> break");
if(Thread.interrupted())
break;
}
}
x_speed_shape = 0; //Speed = 0 (no key is Pressed)
}
[/Java]
Kannst du mir sagen, was ich falsch mache?
Edit:
Mir ist grad aufgefallen, dass ich das eigentlich unnötig kompliziert mache mit dem Thread. Ich könnte ja auch einfach in der KeyListener Methode jeweils gleich die Geschwindigkeit setzen... keine Ahnung wiso ich da so etwas kompliziertes machen wollte :S
Aber würde mich trotzdem noch interessieren warum mein Thread nicht funktioniert.