Запуск приложения Swing программно (удаленные классы) - PullRequest
3 голосов
/ 04 июня 2010

У меня есть немного сложный случай, когда у меня нет исходного кода (или скомпилированного класса) Swing-приложения, которое я пытаюсь запустить автоматически.

Я попытаюсь выполнить ряд задач в этом приложении, нажать несколько кнопок, щелкнуть некоторые части и т. Д. Я хочу сделать это программно.

Каждый Swing-отладчик / робот, с которым я сталкивался, хочет, чтобы у вас был класс, который вы запускаете, и отладчик запускается вместе с классом.

Проблема в том, что мое приложение запускается тем, что я запускаю приложение JNLP, которое аутентифицирует меня (я должен ввести имя пользователя и пароль), а затем запускает несколько классов на удаленном сервере. И приложение Swing запускается.

Я хочу быть в точке, где теперь я могу присоединиться к приложению Swing и запустить его программно. Извините, это кажется слишком сложным, но это сценарий здесь ...

Возможно, нет никакого способа сделать это вообще, пожалуйста, скажите мне также, если это так ...

1 Ответ

2 голосов
/ 04 июня 2010

Если вы просто знаете, где нажимать, это не проблема, если вы создадите собственное приложение для робота. Обычно для этого нужны только стартовые критерии - там, где фактическая программа находится на экране.

Это может помочь вам начать:

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 
        ///1270829/preobrazovat-stroku-v-klychevye-sobytiya
    }

    @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());
    }
}
...