我正在尝试将应用程序从 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();
}
心有法竹
相关分类