Ajuda com Thread

Estou fazendo uns testes com Thread, eu fiz esse código para uma bolinha pular alguns obstáculos, porem a Thread que faz pular, só pode ser usado uma vez, gostaria de saber o que estou fazendo de errado, ou se falta algumas coisa para a bolinha pular quantas vezes forem necessárias.

package PulaPula;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class Tela extends JFrame implements KeyListener {

	public static void main(String[] args) {
		new Tela();

	}

	public Tela() {

		editaTela();
		editaImagens();
		addKeyListener(this);

	}

	JLabel fundo = new JLabel(new ImageIcon("gramasol.jpg"));
	JLabel Bolinha = new JLabel(new ImageIcon("Bolinha.png"));
	int x = 300, y = 900, i = 0;
	Pulo p = new Pulo();

	public class Pulo extends Thread {

		@Override
		public void run() {
			while (i != 200) {

				try {
					sleep(10);
					if (i <= 100) {
						y -= 1;
						Bolinha.setBounds(x, y, 110, 110);
					} else {
						y += 1;
						Bolinha.setBounds(x, y, 110, 110);
					}
					i++;

				} catch (Exception e) {
					// TODO: handle exception
				}
			}
		}

	}

	public void editaTela() {

		setSize(1920, 1080);
		setLayout(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
		setResizable(false);
		add(Bolinha);
		add(fundo);
	}

	public void editaImagens() {

		fundo.setSize(1920, 1080);
		fundo.setVisible(true);
		Bolinha.setBounds(x, y, 110, 110);
		Bolinha.setVisible(true);

	}

	@Override
	public void keyPressed(KeyEvent e) {
		int cod = e.getKeyCode();

		if (cod == KeyEvent.VK_A)
			x -= 8;

		if (cod == KeyEvent.VK_D)
			x += 8;

		if (cod == KeyEvent.VK_SPACE) {

			p.start();

		}

		Bolinha.setBounds(x, y, 110, 110);
		p.isAlive();

	}

	@Override
	public void keyReleased(KeyEvent e) {

	}

	@Override
	public void keyTyped(KeyEvent e) {

	}

}

Não sei se é uma boa ideia fazer uma Thread para isso.
Acho que se você fizesse via método, ainda poderia usar o Thread.sleep(10). e seria mais seguro.
Só não sei dizer se a pausa seria do método ou da execução no geral, você precisaria testar.

1 curtida

Agradeço a atenção.