Your problem is: You are not adding the same snake you are drawing!
frame.add(new Snake());
(new Thread(new Snake())).start();
Each of this lines creates a new Snake, the fist one gets drawn, the second one gets moved.
Try
Snake s = new Snake();
frame.add(s);
(new Thread(s)).start();
instead.