Error when running more than one script using hotkeys.

Asked by eduardobedoya

Hi, Im running Sikuli 1.1.0 I am having this problem...

def runMySikuliScriptA(event):
    runScript("C:\Sikuli\Scripts\MySikuliScriptA")
Env.addHotkey(Key.F1, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptA)

while True:
    wait(1)

def runMySikuliScriptB(event):
    runScript("C:\Sikuli\Scripts\MySikuliScriptB")
Env.addHotkey(Key.F2, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptB)

while True:
    wait(1)

If I run this script, and then I press Ctrl Shift F1 it runs MySikuliScriptA properly and successfuly (create a Debug.log, and write a file successfully), but if then (after 2 seconds) I press Ctrl Shift F2 (in order to run MySikuliScriptB it doesn't do anything and when stopping SIkuli (Shift Alt C) I get this message...

java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at java.awt.Robot.delay(Unknown Source)
at java.awt.Robot.autoDelay(Unknown Source)
at java.awt.Robot.afterEvent(Unknown Source)
at java.awt.Robot.mouseRelease(Unknown Source)
at org.sikuli.script.RobotDesktop.mouseUp(RobotDesktop.java:111)
at org.sikuli.script.Mouse.up(Mouse.java:376)
at org.sikuli.script.Mouse.up(Mouse.java:360)
at org.sikuli.script.Mouse.reset(Mouse.java:100)
at org.sikuli.script.Sikulix.cleanUp(Sikulix.java:326)
at org.sikuli.ide.SikuliIDE$ButtonRun$1.run(SikuliIDE.java:2177)

What does that mean? how can I solve this? I would like to put 6 or 7 scripts all with hotkeys.
Do I need to put the "wait for 1 second" after each script? or just at the end of all??

Thanks Advanced.

Question information

Language:
English Edit question
Status:
Solved
For:
SikuliX Edit question
Assignee:
No assignee Edit question
Solved by:
RaiMan
Solved:
Last query:
Last reply:
Revision history for this message
Best RaiMan (raimund-hocke) said :
#1

# define the action for hotkey ctrl-shift-F1
def runMySikuliScriptA(event):
    runScript("C:\Sikuli\Scripts\MySikuliScriptA")
Env.addHotkey(Key.F1, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptA)

# define the action for hotkey ctrl-shift-F2
def runMySikuliScriptB(event):
    runScript("C:\Sikuli\Scripts\MySikuliScriptB")
Env.addHotkey(Key.F2, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptB)

# define hotkey ctrl-shift-F3 to stop the script
def runMySikuliScriptB(event):
    global shouldStop
    shouldStop = True
Env.addHotkey(Key.F3, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptB)

# keep the script running, to wait for the hotkeys to be pressed
shouldStop = False
while not shouldStop:
    wait(1)

Since you had the infinite wait loop before definition of F2, it was not processed.

After aborting the scriptrun, you get the normal Java reaction, when aborting something, that simply waits.

The above solution allows to stop the script gracefully.

Revision history for this message
eduardobedoya (gonnabdh) said :
#2

Thanks RaiMan, that solved my question.

Revision history for this message
eduardobedoya (gonnabdh) said :
#3

Thanks Raiman, no I don't intend to have a hotkey to stop a script, it stop when it ends...
but I would like to run one script and after it ends (it write a file), then execute another script,...
From your example I used this...

def runMySikuliScriptA(event):
    runScript("C:\Sikuli\Scripts\MySikuliScriptA")
Env.addHotkey(Key.F1, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptA)

def runMySikuliScriptB(event):
    runScript("C:\Sikuli\Scripts\MySikuliScriptB")
Env.addHotkey(Key.F2, KeyModifier.CTRL+KeyModifier.SHIFT, runMySikuliScriptB)

while True:
    wait(1)

Doing this I can press CTRL SHIFT F1 and run scriptA, then after it ends, I press CTRL SHIFT F2 to run scriptB, it worked ok
So this last infinite loop is necessary right? is it helps sikuli to wait until next shortcut is press right??
Thanks Raiman.