I agree you should avoid recursion here. Why not just move the Thread.sleep out of the catch block and use a boolean flag that is only set to true if things work OK.
public static void main(String[] args) {
boolean ok = false;
while (!ok) {
try {
Application.start();
ok = true;
} catch (Exception e) {
// error message
}
}