Невозможно экспортировать класс робота - PullRequest
0 голосов
/ 03 мая 2020

У меня есть приложение, и у меня возникли проблемы, и, надеюсь, я смогу помочь. Приложение довольно простое и обрабатывает логин и двустороннюю аутентификацию у моего поставщика акций с помощью класса awt Robot. Я бегаю windows10 и затмение. Google Chrome - это приложение, с которым оно работает ie. Я использовал Ctrl + T, чтобы открыть новую вкладку. У меня проблема в том, что приложение работает должным образом при запуске froeclipse, но при выполнении экспорта в виде исполняемого файла приложение не работает, нажатие клавиши не работает только мышью. Быстрый поиск в Google говорит, что я должен использовать вместо этого keylistener, но я не знаю, как и если это та проблема.

`основной класс

package login;

import java.awt.HeadlessException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.KeyEvent;
import java.io.IOException;

import robothelper.RobotHelper;

public class Login 
{;

public static void main(String[] args) throws Throwable 
{
    new Login();

}

public Login() throws Throwable
{
    doLogin();
}   
private void doLogin() throws InterruptedException, Throwable 
{
    Robot robot = new Robot();  

    robot.setAutoDelay(40);
    robot.setAutoWaitForIdle(true);
    Thread.sleep(25000);

        robot.keyPress(KeyEvent.VK_CONTROL); 
        RobotHelper.type(KeyEvent.VK_T, robot);
        robot.keyRelease(KeyEvent.VK_CONTROL); 
        RobotHelper.type("url)", robot); 
        RobotHelper.type(KeyEvent.VK_ENTER,robot);
        Thread.sleep(12000); //page to load
        RobotHelper.setMousepointerLocation(robot, 335, 1100);
    RobotHelper.leftClick(robot);
    RobotHelper.type("user", robot);
    RobotHelper.type(KeyEvent.VK_TAB, robot);
    RobotHelper.type("pass", robot);
    RobotHelper.type(KeyEvent.VK_ENTER,robot);
    RobotHelper.setMousepointerLocation(robot, 53 , 950);
    RobotHelper.leftClick(robot);
    Thread.sleep(1000); //addon to open
    runAvanzaAddon(robot);
    RobotHelper.setMousepointerLocation(robot, 335, 1100);
    RobotHelper.leftClick(robot);
    robot.keyPress(KeyEvent.VK_CONTROL);
    RobotHelper.type(KeyEvent.VK_V, robot);
    robot.keyRelease(KeyEvent.VK_CONTROL);
    RobotHelper.type(KeyEvent.VK_TAB, robot);
    RobotHelper.type(KeyEvent.VK_ENTER,robot);      
}
private void runAvanzaAddon(Robot robot) throws HeadlessException, 
UnsupportedFlavorException, IOException, InterruptedException
{
    RobotHelper.setMousepointerLocation(robot, 150, 740);
    RobotHelper.leftClick(robot);;      
    String nowValue = getValuFromClipboard(); 
    String prevValue = getValuFromClipboard();

    while(nowValue.equals(prevValue))
    {
        Thread.sleep(200); 
        prevValue = nowValue; 
        RobotHelper.setMousepointerLocation(robot, 150, 740);
        RobotHelper.leftClick(robot);
        nowValue = getValuFromClipboard();
    }       
}

private String getValuFromClipboard() throws HeadlessException, 
UnsupportedFlavorException, IOException
{

        return (String) Toolkit.getDefaultToolkit()
    .getSystemClipboard().getData(DataFlavor
    .stringFlavor); 
 }
}    

пакет справочного класса robothelper;

import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

public class RobotHelper 
{
public static void leftClick(Robot robot) 
{
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK); 
}

public static void type(int i, Robot robot) 
{
    robot.delay(40);
    robot.keyPress(i);
    robot.keyRelease(i);
}

public static void type(String text, Robot robot) 
{
    StringSelection stringSelection = new 
    StringSelection(text);
    Clipboard clipboard = 
    Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(stringSelection, stringSelection);

    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
}
public static void setMousepointerLocation( Robot robot, int 
x,int y)
{
    robot.mouseMove(y, x);
}
public static Point getMousepointerLocation()
{
    return MouseInfo.getPointerInfo().getLocation();
}
}    

1 Ответ

0 голосов
/ 04 мая 2020

Ниже приведен пример, который может запустить каждый. Приложение открывает новую вкладку в chrome (Ctrl T). Я полагаю, что проблема в том, что из-за Кейлистейнера я однажды заставил его работать. Шаги для воспроизведения: 1 запустите приложение из затмения поверх chrome (откроется новая вкладка. 2 экспортируйте и запустите приложение поверх chrome (новая вкладка НЕ ​​будет открыта.

package login;

import java.awt.Robot;
import java.awt.event.KeyEvent;
import robothelper.RobotHelper;

public class Login 
{;    

public static void main(String[] args) throws Throwable 
{
    new Login();
}

public Login() throws Throwable
{
    doLogin();
}   
private void doLogin() throws InterruptedException, 
Throwable 
{
    Robot robot = new Robot();  

    robot.setAutoDelay(40);
    robot.setAutoWaitForIdle(true);
    Thread.sleep(15000);

    robot.keyPress(KeyEvent.VK_CONTROL); 
    robot.keyPress(KeyEvvnt.VK_T);
    RobotHelper.keyRelease(KeyEvent.VK_T, robot);
    robot.keyRelease(KeyEvent.VK_CONTROL); 
        }
 }
...