2010-06-04 3 views
3

J'ai un cas légèrement compliqué où je n'ai pas le code source (ou la classe compilée) l'application swing que j'essaie de lancer automatiquement.Exécution d'une application Swing par programme (classes distantes)

Je vais essayer de faire une série de tâches sur cette application, appuyez sur des boutons, cliquez sur certaines parties, etc. Je veux être en mesure de le faire par programmation. Chaque débogueur/robot Swing que j'ai rencontré veut que vous lanciez la classe que vous lancez et que le débogueur se lance avec la classe. Problème voici mon application est lancé en lançant une application JNLP, qui m'authentifie (je dois entrer le nom d'utilisateur et mot de passe), puis exécute un tas de classes sur un serveur distant. Et l'application Swing est lancée.

Je veux être à un point où je peux maintenant peut-être attacher à l'application swing et l'exécuter par programmation. Désolé, cela semble trop compliqué, mais c'est le scénario ici ...

Peut-être il n'y a pas moyen de le faire du tout, s'il vous plaît me le dire même si tel est le cas ...

Répondre

2

Si vous venez savoir où cliquer ce n'est pas un problème de faire votre propre application Robot. Il n'a normalement besoin que d'un critère de démarrage - où le programme actuel est à l'écran.

Cela pourrait vous aider à aller:

public class MyRobot extends Robot { 

    public MyRobot(Point initialLocation) throws AWTException { 

     setAutoDelay(20); 

     // focus on the program 
     click(initialLocation); 

     // if you need to take screen shot use 
     BufferedImage screen = 
      createScreenCapture(
       new Rectangle(initialLocation.x, initialLocation.y, 200, 200)); 

     // analyze the screenshot... 
     if(screen.getRGB(50, 50) > 3) /*do something :) */; 


     // go to the correct field 
     press(KeyEvent.VK_TAB); 

     // press "a" 
     press(KeyEvent.VK_A); 

     // go to the next field 
     press(KeyEvent.VK_TAB); 

     // write something... 
     type("Hello World.."); 
    } 

    private void click(Point p) { 
     mousePress(InputEvent.BUTTON1_MASK); 
     mouseRelease(InputEvent.BUTTON1_MASK); 
    } 

    private void press(int key) { 
     keyPress(key); 
     keyRelease(key); 
    } 

    private void type(String string) { 
     // quite complicated... see 
     //http://stackoverflow.com/questions/1248510/convert-string-to-keyevents 
    } 

    @SuppressWarnings("serial") 
    public static void main(String[] args) throws Exception { 
     final JDialog d = new JDialog(); 
     d.setTitle("Init"); 
     d.add(new JButton(
       "Put your mouse above the 'program' " + 
       "and press this button") { 
      { 
      addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        synchronized (d) { d.notify(); } 
        d.dispose(); 
       } 
      });} 
     }); 
     d.setSize(200, 100); 
     d.setVisible(true); 
     // wait for it to be closed 
     synchronized (d) { 
      d.wait(); 
     } 
     new MyRobot(MouseInfo.getPointerInfo().getLocation()); 
    } 
} 
Questions connexes