Sikuli:java.lang.IllegalThreadStateException:无法从事件调度程序线程调用方法

时间:2014-07-12 15:36:15

标签: java multithreading selenium webdriver sikuli

当我尝试使用java web驱动程序和sikuli使用flex自动化一个网站应用程序时,我收到错误" java.lang.IllegalThreadStateException:无法从事件调度程序线程调用方法"使用以下代码单击按钮后

public static void clickImage(String folder, String file) throws FindFailed {

        Screen screen;
        File loc = new File("images/" + folder + "/" + file + ".png");
        Pattern image = new Pattern(loc.getAbsolutePath());
        screen = new Screen();
        if (isImagePresent(image, 20)) {
            try{
            waitUntilLoadCompletes(folder);    
            screen.click(image,0);//This method is throwing error

            }catch(Exception e){System.out.println("click has some prblm"+e);}
        } else {
            new Exception(file+"not found");

        }

此外,我也收到以下错误 [error] mouseDown:按钮仍然按下 - 全部使用 看起来它点击图像但它没有释放按钮意味着它按下鼠标按钮但没有释放。在释放按钮之前,它会抛出我认为的错误

我在以下fn中使用sleep,这在上面的代码中使用

public static boolean isImagePresent( Pattern img, int time) {
        Screen screen=new Screen();
        int i = 0;
        while (i < time) {
            try {
                System.out.println(screen.exists(img).toString());
                return true;
            } catch (Exception e) {
                System.out.println("waiting for image--- "+i+" seconds");
            }
            i++;
            try {
               Thread.sleep(1000);

            } catch (InterruptedException ex) {
                Logger.getLogger(Library.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return false;

    }

1 个答案:

答案 0 :(得分:0)

不应该从因某些事件执行的方法内部调用方法/类。在我的情况下,我从Buttonactionperformed方法

调用构造函数

我使用了一个变量并创建了单独的线程并调用了构造函数.now working

  @Override
        public void run() {
           while(true){//System.out.println(start);

           if(start){jButton1.setEnabled(false);

               new Driver(login, jComboBox2.getSelectedItem().toString());
              jButton1.setEnabled(true);
               start=false;
           }
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException ex) {
                   Logger.getLogger(LoginFrame.class.getName()).log(Level.SEVERE, null, ex);
               }
           }
        }