I tried making a game loop in Java using the Timer from java.util.Timer. I am unable to get my game loop to execute during the timer tick. Here is an example of this issue.
First of all, Timer.schedule schedules the task for one execution, not for repeated executions. So this program can only make the button move once.
And you have a second problem : all the interactions with swing components should be done in the event dispatch thread, and not in a background thread. Read http://download.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading for more details. Use a javax.swing.Timer to perform swing actions at repeated intervals.
Since this is a Swing application, don't use a java.util.Timer but rather a javax.swing.Timer also known as a Swing Timer.
e.g.,
private static final long serialVersionUID = 0L;
private static final int TIMER_DELAY = 35;
in the constructor
// the timer variable must be a javax.swing.Timer
// TIMER_DELAY is a constant int and = 35;
new javax.swing.Timer(TIMER_DELAY, new ActionListener() {
public void actionPerformed(ActionEvent e) {
gameLoop();
}
}).start();
and
public void gameLoop() {
button.setLocation(button.getLocation().x + 1, button.getLocation().y);
getContentPane().repaint(); // don't forget to repaint the container
}