Java 如何实现循环机制,即函数在不满足某个条件之前调用self,或者对函数调用进行排队
我正在尝试将一个应用程序从python(使用TKinter)转换为Java。 Tkinter具有循环机制,例如:Java 如何实现循环机制,即函数在不满足某个条件之前调用self,或者对函数调用进行排队,java,loops,Java,Loops,我正在尝试将一个应用程序从python(使用TKinter)转换为Java。 Tkinter具有循环机制,例如: <!-- language: python --> def checkState(): if checkCond1(): root.after_idle(cond1Loop) elif checkCond2(): root.after_idle(cond2Loop) elif checkCond3():
<!-- 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()
def checkState():
如果选中Cond1():
root.after_空闲(cond1Loop)
elif checkCond2():
root.after_idle(cond2Loop)
elif checkCond3():
root.after_idle(cond3Loop)
其他:
打印('未找到已知状态…')
root.update_idletasks()#等待空闲的Tk任务
root.after_idle(检查状态)
def cond1Loop():
#这里的一些检查可能会更深入
root.after_空闲(cond1Loop)
def cond2Loop():
#这里的一些检查可能会更深入
root.after_idle(cond2Loop)
def cond3Loop():
#这里的一些检查可能会更深入
root.after_idle(cond3Loop)
root=Tk()
主窗口=帧(根)
#有些人在这里赢了
root.after_idle(checkState)#在没有空闲任务时调用函数
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();
}
私有void mainLogicLoop(){
javax.swing.Timer localtimer=新的javax.swing.Timer(100,e->{
//发现状态
if(checkCond1()){
System.out.println(“我处于第1状态”);
cond1Loop();
//我需要停止这个计时器,
//但是从这里看不到localtimer。
//cond1Loop()将运行自己的计时器。。。
}否则
if(checkCond2()){
System.out.println(“我处于第二状态”);
cond2Loop();
//我需要停止这个计时器,
//但是从这里看不到localtimer。
//cond2Loop()将运行自己的计时器。。。
}否则
if(checkCond3()){
System.out.println(“我处于第3状态”);
cond3Loop();
//我需要停止这个计时器,
//但是从这里看不到localtimer。
//cond3Loop()将运行自己的计时器。。。
}否则{
System.out.println(“未发现已知条件”);
}
localtimer.start();
}
公共静态void main(字符串[]args){
mainLogicLoop();
}
请不要建议使用外部脚本,比如Sikuli和依赖于平台的特性。我需要“纯本地”Java
--更新--
使用JDK 1.8是因为得益于@cricket_007在WinXP上运行,所以使用ExecutorService很容易实现这种循环机制。工作代码示例: 在构造函数中,我创建服务
ExecutorService service=Executors.newCachedThreadPool();
在每一个循环的末端我都会呼叫
service.submit(()->loopname())
您使用javax.swing.Timer而不是java.util.Timer的原因是什么?没有原因-Google已经返回了一个使用javax.swing.Timer的示例。您首先为什么要使用计时器?您能描述一下需要使用计时器的核心算法吗?听起来太复杂了……这只是尝试实现looping机制,一个开始探索的点。我建议改用ScheduledExecutorService