Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现循环机制,即函数在不满足某个条件之前调用self,或者对函数调用进行排队_Java_Loops - Fatal编程技术网

Java 如何实现循环机制,即函数在不满足某个条件之前调用self,或者对函数调用进行排队

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():

我正在尝试将一个应用程序从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()

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