Es necesario añadir suficiente retraso para la aplicación para inicializar y obtener el foco totalmente.
Aquí está un ejemplo de trabajo básica ... Andreas_D es correcto que se necesita para emular la llave del sistema para cambiar entre programas ... (Alt +Tab en Windows, Cmd +Tab en OS X)
import java.awt.*;
import static java.awt.event.KeyEvent.*;
import java.io.IOException;
public class RobotSample {
//https://stackoverflow.com/questions/4782231
private static Integer[] KEY_CODES = { VK_S, VK_T, VK_A, VK_C, VK_K, VK_O, VK_V, VK_E, VK_R, VK_F, VK_L,VK_O, VK_W, VK_DECIMAL, VK_C, VK_O, VK_M, VK_SLASH, VK_Q, VK_U, VK_E, VK_S, VK_T, VK_I, VK_O, VK_N, VK_S, VK_SLASH, VK_4, VK_7, VK_8, VK_2, VK_2, VK_3, VK_1, VK_ENTER };
public static void main(String[] args) throws IOException {
try {
Robot robot = new Robot();
Runtime runtime = Runtime.getRuntime();
runtime.exec("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
robot.keyPress(VK_ALT);
robot.keyPress(VK_TAB);
robot.keyRelease(VK_ALT);
robot.keyRelease(VK_TAB);
//Chill a sec...
robot.delay(1000);
for(int i = 0; i < KEY_CODES.length; ++i) {
robot.keyPress(KEY_CODES[i]);
robot.keyRelease(KEY_CODES[i]);
robot.delay(80);
}
} catch(AWTException e) {
e.getMessage();
}
}
}
Una opción alternativa es que mi aplicación Java nunca se pone el foco, por lo que el uso de las ventanas tiene el enfoque y al hacer clic en un botón en la aplicación Java el foco no se pierde en la ventana original. No tengo idea si eso es posible? –
para aquellos que vienen a esta pregunta a través de google, en OSX: http://stackoverflow.com/questions/14859733/set-focus-of-any-application-with-java-osx – ericsoco