[英]How do i implement a Jbutton and event listener to close the application?
[英]How do I efficiently implement a singleton listener in a standalone Java application?
我的代码:
public class Server {
public static void main(String[] args) {
EventHandler.getInstance().start();
}
...
}
public class EventHandler implements Runnable, SomeEventListener {
private static final EventHandler INSTANCE = new EventHandler();
private static final Thread THREAD = new Thread(INSTANCE);
private static volatile boolean isRunning = false;
private EventHandler () {}
private static EventHandler getInstance() {
return INSTANCE;
}
public void start() {
isRunning = true;
THREAD.start();
}
public void stop() {
isRunning = false;
}
//Listener method that was overriden
public void onEvent(Event event) {
//...do stuff
}
public void run() {
while (isRunning) {
//Does nothing... just keeps the application running. Is this okay?
}
}
}
只能有一个EventHandler
实例。 它工作得很好,但我有一些担忧:
run()
方法除了在无限循环中运行之外什么都没做,我觉得很奇怪。 这个可以吗? 对于非Web应用程序上的侦听器,我真的没有任何经验。 我想知道你们是否可以提供一些意见。
我发现有一个run()方法除了在无限循环中运行之外什么都没做,我觉得很奇怪。 这个可以吗?
不,这大致相反。
在Windows中,当我启动此应用程序时。 我的CPU使用率为25%,但是在Linux上启动时,CPU使用率达到100%......为什么会这样?
它们具有相同数量的核心吗? 你正在用循环捆绑一个。
我不明白为什么你需要给它自己的线程(因此你需要实现Runnable和覆盖run())。
现在我承认我不知道SomeEventListener是做什么的,但是因为你没有从run()方法调用onEvent方法,并且那个方法就是你的新线程所做的,所以没有理由创建一个新的线程根本就是onEvent方法(希望)无论如何都会从另一个线程调用。
我不知道你是如何注册你的监听器及其功能的,但也许你只能创建EventHandler
实例,然后只使用它的方法作为某种回调:
Consumer<Event> con = EventHandler.getInstance()::onEvent;
// When event arrives
con.apply(event);
您不需要在此方法中启动另一个线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.