Я пытаюсь перевести приложение с python (с TKinter) на Java.Tkinter имеет механизм зацикливания, такой как:
<!-- language: python -->
def checkState():
if checkCond1():
root.after_idle(cond1Loop)
elif checkCond2():
root.after_idle(cond2Loop)
elif checkCond3():
root.after_idle(cond3Loop)
else:
print('not found known state...')
root.update_idletasks() # waits for idle Tk tasks
root.after_idle(checkState)
def cond1Loop():
# some checks here, may be looping deeper
root.after_idle(cond1Loop)
def cond2Loop():
# some checks here, may be looping deeper
root.after_idle(cond2Loop)
def cond3Loop():
# some checks here, may be looping deeper
root.after_idle(cond3Loop)
root = Tk()
mainWindow = Frame(root)
# some win init here
root.after_idle(checkState)# calls function when no idle tasks
root.mainloop()
Моя первая попытка состояла в том, чтобы реализовать его с помощью таймеров, но не может остановить таймер из-за его собственной функции:
<!-- language: java-->
private void mainLogicLoop(){
javax.swing.Timer localtimer = new javax.swing.Timer(100, e -> {
//finding state
if(checkCond1()){
System.out.println("I am at cond 1.");
cond1Loop();
//here i need to stop this timer,
//but localtimer is invisible from here.
//cond1Loop() will run its own timer...
}else
if(checkCond2()){
System.out.println("I am at cond 2.");
cond2Loop();
//here i need to stop this timer,
//but localtimer is invisible from here.
//cond2Loop() will run its own timer...
}else
if(checkCond3()){
System.out.println("I am at cond 3.");
cond3Loop();
//here i need to stop this timer,
//but localtimer is invisible from here.
//cond3Loop() will run its own timer...
}else{
System.out.println("No known conditions found.");
}
localtimer.start();
}
public static void main(String[] args) {
mainLogicLoop();
}
Пожалуйста,не предлагайте внешние сценарии, такие как Sikuli и зависящие от платформы функции.Мне нужна как бы «чистая и нативная» Java, какой она может быть.
- update -
Использование JDK 1.8, потому что работает на WinXP