Game loop not accurate. How can I make a better one ?

This game loop that I have implemented is not constant. I want my program to run at 60 frames per second. Basically I need to make the Thread sleep for 17 milliseconds after each frame, but sometimes it sleeps more that 17 milliseconds, this makes my game jittery. What should I do to make a more efficient game loop?

public class GamePanel extends JPanel implements Runnable {

	
	@Override
	public void run() {
		currentTime = System.currentTimeMillis();
		prevTime = currentTime;
		while(true) {
			repaint();
			upd();
			try {
				Thread.sleep(17);
			} catch(InterruptedException e) {
				e.printStackTrace();
			}
			prevTime = currentTime;
			currentTime = System.currentTimeMillis();
			delta = currentTime - prevTime;
			System.out.println(delta);
		}
	}
}