返回/停止功能的执行在Java中的一个按键(Returning/Stopping the execu

2019-09-17 03:21发布

我在我的节目一定的功能,我想停止对键的按压。 我有一个本机键盘钩子设立用于这一目的。 现在,我调用System.exit当检测到(0),这把钥匙。 不过,我不想退出程序,只是停止操作,并返回到它被调用。 一个例子在下文给出。

public class Main {
    public static void main(String[] args) {
        System.out.println("Calling function that can be stopped with CTRL+C");
        foo(); // Should return when CTRL+C is pressed
        System.out.println("Function has returned");
    }
}

我试过把电话为foo()中的一个线程,所以我可以调用Thread.interrupt()但我想在函数调用被阻止,无法无阻塞。 也有阻塞IO在调用foo()所以我宁愿不中断处理,除非它是必要的,因为我不得不应付ClosedByInterruptException异常和以前已经引起的问题。

另外的身体foo()是很长,里面有它的许多功能调用,所以写if (stop == true) return; 在功能上是不是一种选择。

有没有更好的办法做到这一点不是让一个阻塞线程? 如果是这样,怎么样? 如果不是,我怎么会做一个阻塞线程?

Answer 1:

这个怎么样?

// Create and start the thread
MyThread thread = new MyThread();
thread.start();

while (true) {
    // Do work

    // Pause the thread
    synchronized (thread) {
        thread.pleaseWait = true;
    }

    // Do work

    // Resume the thread
    synchronized (thread) {
        thread.pleaseWait = false;
        thread.notify();
    }

    // Do work
}

class MyThread extends Thread {
    boolean pleaseWait = false;

    // This method is called when the thread runs
    public void run() {
        while (true) {
            // Do work

            // Check if should wait
            synchronized (this) {
                while (pleaseWait) {
                    try {
                        wait();
                    } catch (Exception e) {
                    }
                }
            }

            // Do work
        }
    }
}

(摘自http://www.exampledepot.com/egs/java.lang/PauseThread.html不是我自己的工作)



文章来源: Returning/Stopping the execution of a function on a keypress in Java