如何在java的主程序后台实现事件监听器?

时间:2010-12-23 00:32:59

标签: java

嗨,我是初学者,如果听起来很天真,我很抱歉。

我想实现一个在后台运行并一直监听的线程。通过监听我的意思是说它继续检查从主线程返回的值,如果vaue超过某个数字,它执行某种方法,或者说退出程序。

如果你能给我一些想法或至少推荐我一些有用的东西,那就太棒了。

5 个答案:

答案 0 :(得分:2)

您不希望此线程在循环中运行,不断轮询该值,因为这会浪费处理。

理想情况下,当值发生变化时,会主动通知监听器。这将要求修改受监视值的任何代码都调用特殊方法。侦听器可能没有必要在单独的线程中运行;它取决于听众在收到通知时所做的事情。

如果无法更改修改值的代码,那么您可以做的最好是每隔一段时间检查一次该值。您不会立即看到更改,并且可能会完全错过更改,因为值在一段时间内会多次更改。

哪种解决方案最适合您的情况?

答案 1 :(得分:1)

您可以在Java Tutorials中找到有关使用线程的一些信息(如果您不熟悉Java中的并发性,我建议您首先阅读本教程)。特别是this section可能对您有用(它显示了如何创建和启动新线程)。

答案 2 :(得分:1)

如果您只需要从另一个线程轮询结果,请尝试使用@Piotr建议的java.util.concurrent包。以下是如何执行此操作的具体示例:

import java.util.concurrent.*;

class Main{
    public static void main(String[] args) throws Exception{
        //Create a service for executing tasks in a separate thread
        ExecutorService ex = Executors.newSingleThreadExecutor();
        //Submit a task with Integer return value to the service
        Future<Integer> otherThread = ex.submit(new Callable<Integer>(){
            public Integer call(){
                //do you main logic here
                return 999;//return the desired result
            }
        }

        //you can do other stuff here (the main thread)
        //independently of the main logic (in a separate thread)

        //This will poll for the result from the main
        //logic and put it into "result" when it's available
        Integer result = otherTread.get();

        //whatever you wanna do with your result
    }
}

希望这有帮助。

答案 3 :(得分:0)

我猜你可以简单地使用gui组件作为主线程,就像JTextField一样, 然后阅读事件处理,您将能够轻松地收听文本字段输入值的状态更改。

答案 4 :(得分:0)