Here are a couple of sites for folks to learn to program in Java, or to get better at it.
In here you program a virtual battling robot, and pit it against others. The more advanced your programming skills the better your robot performs in the arena.
Same concept but with race cars instead of robots. The sites also contain various tutorials for Java programming and various other readings and links.