auf Threadende warten

JAVAnnik

Bekanntes Mitglied
Aloha...

... ich bin grade mit dem bewegen von Objekten auf einem JPanel beschäftigt und möchte, dass sich dass Objekt wenn man die Pfeiltasten drückt, immer um 25PX in die jeweilige Richtung bewegt. in dieser Zeit jedoch soll eine weiteres Drücken eines Pfeiles wirkungslos bleiben. Ich dachte mir man könnte vlt. im KeyListener überprüfen ob der Thread noch läuft aber ich habe es mit verschiedenen dingen versucht ohne Erfolg... hier mal der KeyListener weiß jem. Rat???

Java:
addKeyListener(new KeyAdapter() 
	{
	    public void keyPressed(KeyEvent evt) 
	    {
	    	ground1.getRichtung(evt);
	    	new Thread(ground1).start(); 		    	
	    }
	});
 

AmunRa

Gesperrter Benutzer
setzt dir irgendwo eine boolean flag auf das du zu greifen kannst und wenn diese flag true is dann einfach keinen neuen Thread erstellen. am Anfang des Thread auf true setzen und am ende false
 

Marco13

Top Contributor
Bei einem Tastendruck einen Thread erstellen sieht IMHO in dieser Form (!) erstmal SEHR fregwürdig aus. Hast du schon Tutorials (z.B. das von Quaxli) gelesen?
 

JAVAnnik

Bekanntes Mitglied
Ich zeig euch mal meinen ganzen Code (lang ist er noch nicht). Ich hab es jetzt geschaft, dass man in der Bewegung keine Richtungsänderung vornehmen kann. Aber wenn ich die Taste gedrückt halte läuft es nicht flüssig weiter sondern stockt nachdem der Thread das erste mal gelaufen ist... das hat sicherlich damit zu tun, dass ich meine boolan Variable erst im Thread auf true und schon im Thread auf false setze... gibt es noch eine andere Lösung...

Java:
public class Try extends JFrame
{ 		
  
  private JPanel cp;
  private Ground ground1;
  
  public Try(String title) 
  {
	super(title);
    this.setLocationRelativeTo(null);
    this.setResizable(false);
	this.cp = new JPanel(null);
	Dimension d = new Dimension(300,300);
	cp.setPreferredSize(d);
	cp.setBackground(Color.black);
		
	ground1 = new Ground();
	cp.add(ground1);
	this.add(this.cp);	
	this.pack();
	this.setVisible(true);
	
	addKeyListener(new KeyAdapter() 
	{
	    public void keyPressed(KeyEvent evt) 
	    {
	    	if (ground1.active == false)
	    	{
	    		ground1.getRichtung(evt);
	    		new Thread(ground1).start(); 
	    	}	    			    	
	    }
	});
  }
  
  
  public static void main(String[] args)
  {
    Try Try1 = new Try("Wokemon");    
  }
}


Java:
public class Ground extends JLabel implements Runnable
{
	
	KeyEvent richtung;
	boolean active;
	
	public Ground()
	{	
		String imgsrc = "C:/Dokumente und Einstellungen/Jannik/Eigene Dateien/Downloads/stadts.png";		
		ImageIcon icon = new ImageIcon(imgsrc);
		this.setIcon(icon);
		this.setSize(1200,800);
	}
	
	public void getRichtung(KeyEvent evt)
	{
		this.richtung = evt;
	}
	
	public void run() 
	{		 		
		active = true;
		int x = this.getX();
		int y = this.getY();
		for(int i=0; i<25; i++)
		{
			try {
		           Thread.sleep(10);
		        } catch (InterruptedException ex) {
		           ex.printStackTrace();
		        }		            
		        if (richtung.getKeyCode()==KeyEvent.VK_RIGHT) this.setBounds(x-i,y, 1200,800);    
		        if (richtung.getKeyCode()==KeyEvent.VK_LEFT) this.setBounds(x+i,y, 1200,800); 
		        if (richtung.getKeyCode()==KeyEvent.VK_DOWN) this.setBounds(x,y-i, 1200,800); 
		        if (richtung.getKeyCode()==KeyEvent.VK_UP) this.setBounds(x,y+i, 1200,800); 
		        repaint();	
		}	                  		
		active = false;
	}
}
 

Marco13

Top Contributor
Warum erstellst du nicht einen Thread ("Game Thread") der sich um die Bewegung kümmert, und nur wenn die flags gesetzt sind wird das Objekt bewegt? Dass der sprite ein JLabel ist, ist IMHO häßlich, und eigentlich darf setBounds NUR vom Event-Dispatch-Thread aufgerufen werden, aber das sind erstmal weniger "drängende" Probleme...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Threadende erkennen Java Basics - Anfänger-Themen 6
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
E Richtiges Warten Java Basics - Anfänger-Themen 8
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
G Wie kann ich 1s lang warten? Java Basics - Anfänger-Themen 1
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
A Thread auf anderen warten Java Basics - Anfänger-Themen 2
C Warten auf Antwort Java Basics - Anfänger-Themen 22
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
E ExecutorService warten bis alles fertig? Java Basics - Anfänger-Themen 5
A Threads Eine Klasse muss auf Variable der Anderen warten. Java Basics - Anfänger-Themen 6
D Input/Output Auf Tasteneingabe warten Java Basics - Anfänger-Themen 4
A Activity1 soll auf Activity2 warten (Camera-Intent) Java Basics - Anfänger-Themen 5
D Threads Kartenspiel - auf legen warten Java Basics - Anfänger-Themen 15
B Methode warten lassen bis Button gedrückt wird Java Basics - Anfänger-Themen 16
H Auf Threads warten Java Basics - Anfänger-Themen 3
S Warten bis alle Threads fertig sind Java Basics - Anfänger-Themen 12
I Auf DB-Operation warten Java Basics - Anfänger-Themen 2
R Thread soll auf andere Threads warten Java Basics - Anfänger-Themen 3
T Warteschlange warten lassen bis Ereignis Java Basics - Anfänger-Themen 27
A Main warten lassen bis Variable durch Button übergeben wird Java Basics - Anfänger-Themen 2
V Warten bis die Länge eines Strings nicht mehr 0 ist Java Basics - Anfänger-Themen 13
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
D Auf Event warten Java Basics - Anfänger-Themen 4
F Logikproblem: Auf Mouselistener warten Java Basics - Anfänger-Themen 6
E Auf Mouselistener warten?! Java Basics - Anfänger-Themen 20
M Warten bis Thread an einem Semaphore angekommen ist Java Basics - Anfänger-Themen 4
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
S Auf andere Methode warten Java Basics - Anfänger-Themen 7
B Während Schleife nicht auf Eingabe warten Java Basics - Anfänger-Themen 2
T auf vbscript warten Java Basics - Anfänger-Themen 3
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
C auf beendigung eines threads warten Java Basics - Anfänger-Themen 6
P Warten auf KeyTyped Java Basics - Anfänger-Themen 7
M warten in einer while-schleife Java Basics - Anfänger-Themen 12
L programm zum warten zwingen Java Basics - Anfänger-Themen 4
B Auf Programm warten Java Basics - Anfänger-Themen 2
S Auf Object warten Java Basics - Anfänger-Themen 2
K Auf File- Befehl warten. Java Basics - Anfänger-Themen 10
T eine Sekunde warten Java Basics - Anfänger-Themen 11
C Konsolenanwendung auf belibige Taste warten Java Basics - Anfänger-Themen 2
D Auf anderes Fenster Warten Java Basics - Anfänger-Themen 6
A Warten auf Userinput Java Basics - Anfänger-Themen 2
G Bei JDialog warten Java Basics - Anfänger-Themen 5
T Auf Selection warten Java Basics - Anfänger-Themen 7
N Java Insel 6 lesen oder auf 7 warten ? Java Basics - Anfänger-Themen 11
S Programmablauf pausieren, bzw. auf Eingabe warten Java Basics - Anfänger-Themen 4
G Warten auf Eingabe Java Basics - Anfänger-Themen 12
G Thread soll warten Java Basics - Anfänger-Themen 5
F 1 Minute warten Java Basics - Anfänger-Themen 18
S Thread auf Thread warten lassen. Java Basics - Anfänger-Themen 2
G auf ende mehrerer threads warten Java Basics - Anfänger-Themen 2
B Timer / Thread warten Java Basics - Anfänger-Themen 3
G warten Java Basics - Anfänger-Themen 10
P Warten-Fenster Java Basics - Anfänger-Themen 8
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
A Bitte Warten Java Basics - Anfänger-Themen 2
P Externen Proceß starten und warten bis beendet? Java Basics - Anfänger-Themen 2
J Threads: warten bis erste aktion ausgeführt wurde Java Basics - Anfänger-Themen 6
G Eine Methode zum Warten? Java Basics - Anfänger-Themen 7
G Frage zum Warten auf und Aufwecken von Threads Java Basics - Anfänger-Themen 2
L Einfaches Warten in eine Schleife Java Basics - Anfänger-Themen 9
B auf mehrere Threads warten Java Basics - Anfänger-Themen 3
K Animation warten lassen Java Basics - Anfänger-Themen 9
S Auf JInternalFrame warten? Java Basics - Anfänger-Themen 2
R Warten, bis ein Prozess gestartet wurde Java Basics - Anfänger-Themen 23
M x Sekunden warten Java Basics - Anfänger-Themen 13
P Bitte um ein paar Tipps! (Threads, Warten auf Ereignisse,.) Java Basics - Anfänger-Themen 2
M Wie lässt man eine Methode warten ohne Threads zu benutzen? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben