From 9f7829b28a99969760fa91fa02866333d6a291d5 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Sat, 13 Jun 2020 20:21:55 +0200 Subject: [PATCH] fixed nullpointerexception, eventsystem improved, shutdownhook --- src/main/java/de/mrbesen/telegram/TelegramAPI.java | 12 +++++++++--- .../java/de/mrbesen/telegram/event/EventManager.java | 8 ++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/mrbesen/telegram/TelegramAPI.java b/src/main/java/de/mrbesen/telegram/TelegramAPI.java index 0b68e8b..9043708 100644 --- a/src/main/java/de/mrbesen/telegram/TelegramAPI.java +++ b/src/main/java/de/mrbesen/telegram/TelegramAPI.java @@ -111,7 +111,10 @@ public class TelegramAPI implements Runnable { thread.start(); } else { throw new IllegalStateException("Still Running."); - } + } + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + stop(); + }, "TelegramAPI Shutdown Hook")); } public void addAdmin(long admin) { @@ -151,12 +154,13 @@ public class TelegramAPI implements Runnable { if(con.getResponseCode() == 200) { return new JSONObject(readfromIS(con.getInputStream())); } else { + System.out.println("request " + request + " " + parameter); String errdesc = "[No description available]"; try { //try to read error message JSONObject returned = new JSONObject(readfromIS(con.getErrorStream())); errdesc = returned.getString("description"); - } catch(Throwable ignore) { } + } catch(Throwable ignore) { } throw new APIError(parameter, request, con.getResponseCode(), null, errdesc); //throw new IOException("API request returned HTTP " + con.getResponseCode() + " (" + con.getResponseMessage() + ") for action " + request + "\nurl: " + url.toString() + "\nparams: " + parameter + "\nerror description: " + errdesc); } @@ -289,6 +293,9 @@ public class TelegramAPI implements Runnable { public void stop() { run = false; + log.log("tapi stoped."); + if(thread == null) return; + thread.interrupt(); Thread.yield();//try to not get into that loop while(isRunning()) { @@ -298,7 +305,6 @@ public class TelegramAPI implements Runnable { Thread.sleep(10); } catch(InterruptedException e) {} } - log.log("tapi stoped."); thread = null; } diff --git a/src/main/java/de/mrbesen/telegram/event/EventManager.java b/src/main/java/de/mrbesen/telegram/event/EventManager.java index 4542907..c3cbf0a 100644 --- a/src/main/java/de/mrbesen/telegram/event/EventManager.java +++ b/src/main/java/de/mrbesen/telegram/event/EventManager.java @@ -6,17 +6,17 @@ import java.util.function.Consumer; public class EventManager { - private HashMap, ArrayList> listeners = new HashMap<>(); + private HashMap, ArrayList>> listeners = new HashMap<>(); public EventManager() {} - public void registerEvent(Class eventtype, Consumer handler) { + public void registerEvent(Class eventtype, Consumer handler) { if (handler == null) { throw new NullPointerException(); } //get list - ArrayList list = listeners.get(eventtype); + ArrayList> list = listeners.get(eventtype); if (list == null) { //create and add list list = new ArrayList<>(); @@ -31,7 +31,7 @@ public class EventManager { public Event callEvent(Event e) { if(e == null) return e; - ArrayList listner = listeners.get(e.getClass()); + ArrayList> listner = listeners.get(e.getClass()); if(listner != null) { for (Consumer listn : listner) { try {