猿问

如何实现循环机制,函数调用self直到某些条件不满足,或者排队函数调用

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

}



喵喔喔
浏览 116回答 1
1回答

心有法竹

这个循环机制很容易使用 ExecutorService 实现。工作代码示例:在构造函数中我创建服务ExecutorService service = Executors.newCachedThreadPool();&nbsp;并在每个循环结束时调用&nbsp;service.submit(() -> loopname());
随时随地看视频慕课网APP

相关分类

Java
我要回答