2011-07-28 10 views
0

BasicRobot(FEST)を使用しようとすると次のようになります。私はこれを解決する方法を知らない。ここで BasicRobotを使用しているときにIllegalThreadStateExceptionが発生する

[ConditionalEventPump] Exception occurred during event dispatching: 
java.lang.IllegalThreadStateException: Cannot call method from the event dispatcher thread 
    at org.fest.swing.core.BasicRobot.waitForIdle(BasicRobot.java:669) 
    at org.fest.swing.core.BasicRobot.waitForIdle(BasicRobot.java:654) 
    at org.fest.swing.core.BasicRobot.click(BasicRobot.java:426) 
    at org.fest.swing.core.BasicRobot.click(BasicRobot.java:387) 
    at org.fest.swing.core.BasicRobot.click(BasicRobot.java:372) 
    at org.fest.swing.core.BasicRobot.click(BasicRobot.java:360) 
    at org.fest.swing.driver.ComponentDriver.click(ComponentDriver.java:94) 
    at org.fest.swing.fixture.JButtonFixture.click(JButtonFixture.java:99) 

はコードです:

BasicRobot robot = (BasicRobot) BasicRobot.robotWithCurrentAwtHierarchy() 

MainFrame.button("setup").click(); 
//Exception is thrown in this line 
DialogFixture setupViewDialog = WindowFinder.findDialog("setup").using(robot); 
setupViewDialog.button("Save").click(); 

どのように私はこの問題を解決することができますか?

答えて

1

あなたがそうのように、EDTからclick()を呼び出し、それを呼び出すための新しいスレッドを起動できないように見えます:

BasicRobot robot = (BasicRobot) BasicRobot.robotWithCurrentAwtHierarchy() 

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     MainFrame.button("setup").click(); 
    } 
}).start(); 
DialogFixture setupViewDialog = WindowFinder.findDialog("setup").using(robot); 
new Thread(new Runnable() { 
    @Override 
    public void run() { 
     setupViewDialog.button("Save").click(); 
    } 
}).start(); 
+0

それは実際にはしかし、メインフレーム上に座っているセットアップボタンをクリックしその後、私は例外を取得します。 dialogFixtureを見つける際に例外がスローされていると思います。 –

+0

@Mehmet Yesin:stacktraceは 'click'が呼び出されたことを示しています。 –

+0

あなたのコードはこの問題を解決しました。ありがとうございました! –

関連する問題